You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中获取AWS Lambda回调返回的SQL查询结果

Solution

Let's walk through how to retrieve your SQL query results in Java, plus a quick optional tweak to your Lambda function to simplify parsing.

Step 1: Extract and Parse the Lambda Payload in Java

The AWS Lambda InvokeResult returns your query results as a ByteBuffer—you'll need to convert this to a string and parse the JSON to access the user data. Here's how to do it with Jackson (a common Java JSON library):

import com.amazonaws.services.lambda.model.InvokeResult;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;

// After invoking your Lambda function
InvokeResult result = client.invoke(request);

// First, check for Lambda execution errors
if (result.getFunctionError() != null) {
    System.err.println("Lambda failed: " + result.getFunctionError());
    return;
}

// Convert the ByteBuffer payload to a readable string
ByteBuffer payloadBuffer = result.getPayload();
String payloadString = new String(payloadBuffer.array(), StandardCharsets.UTF_8);

// Parse the JSON response
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(payloadString);

// The mssql query result stores rows in the "recordset" field
JsonNode userRows = rootNode.get("recordset");
if (userRows != null && userRows.isArray() && userRows.size() > 0) {
    // Grab the first user (since your query targets a single username)
    JsonNode user = userRows.get(0);
    String username = user.get("Username").asText();
    // Extract other fields from your user table as needed, e.g.:
    // String email = user.get("Email").asText();
    System.out.println("Found user: " + username);
} else {
    System.out.println("No user matching the query was found");
}

Step 2 (Optional): Simplify the Lambda Response

To make parsing even cleaner in Java, modify your Lambda function to return only the user rows instead of the full mssql result object. Update the callback line like this:

new mssql.Request(conn).query(passedStatement,(err, result) => { 
    if (err) { 
        callback(err); 
    } else { 
        console.log("done"); 
        // Return just the array of user records
        callback(null, result.recordset); 
    } 
});

With this change, you can directly map the payload to a Java class representing your user:

// Define a User class matching your SQL table columns
public class User {
    private String Username;
    // Add other fields (e.g., Email, FullName) and their getters/setters
    
    public String getUsername() { return Username; }
    public void setUsername(String username) { Username = username; }
}

// Parse the payload directly to an array of User objects
User[] users = objectMapper.readValue(payloadString, User[].class);
if (users.length > 0) {
    User matchedUser = users[0];
    System.out.println("Retrieved user: " + matchedUser.getUsername());
}

Key Reminders

  • Use any JSON library you prefer (Gson works too if you don't want to use Jackson).
  • Always handle edge cases like empty results or unexpected JSON structures to avoid runtime errors.
  • The LogType.Tail setting you're using will return Lambda logs in result.getLogResult()—you can decode this if you need to debug further:
    String logs = new String(Base64.getDecoder().decode(result.getLogResult()), StandardCharsets.UTF_8);
    System.out.println("Lambda logs: " + logs);
    

内容的提问来源于stack exchange,提问作者infojolt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:55:59