使用 AWS Aurora 数据 api for java 和 AWS Sdk for Java 2.x

Using AWS Aurora data api for java with AWS Sdk for Java 2.x

我一直在尝试使用我的 lambda 中的 Aurora aws 数据 api 来执行一些操作,例如对表进行插入和更新。我面临的问题是官方 doc 仅提供了有关使用 Java 版本 1.x 的 AWS SDK 的详细信息。与 1.0 版相比,最新版本的 aws java sdk 2.x 有几处更改,这使我无法将代码移植到最新的 sdk。我无法找到 java aws sdk 2.0 的数据 api 的更新文档。如果有人能给我一个示例代码,它在最新的 sdk 上执行与下面相同的操作,那就太好了:

public void insert() {
    AWSRDSData rdsData = AWSRDSDataClient.builder().build();

    BatchExecuteStatementRequest request = new BatchExecuteStatementRequest()
            .withDatabase("test")
            .withResourceArn(RESOURCE_ARN)
            .withSecretArn(SECRET_ARN)
            .withSql("INSERT INTO test_table2 VALUES (:string, :number)")
            .withParameterSets(Arrays.asList(
                    Arrays.asList(
                            new SqlParameter().withName("string").withValue(new Field().withStringValue("Hello")),
                            new SqlParameter().withName("number").withValue(new Field().withLongValue(1L))
                    ),
                    Arrays.asList(
                            new SqlParameter().withName("string").withValue(new Field().withStringValue("World")),
                            new SqlParameter().withName("number").withValue(new Field().withLongValue(2L))
                    )
            ));

    rdsData.batchExecuteStatement(request);
}

所以我浏览了 aws sdk 版本 2,发现以下代码对我有用:

public ExecuteStatementResponse insert() {
    RdsDataClient rdsData = RdsDataClient
            .builder()
            .build();
    try {
        ExecuteStatementRequest executeStatementRequest = ExecuteStatementRequest
                .builder()
                .resourceArn(resourceArn)
                .secretArn(secretArn)
                .database(database)
                .sql("INSERT INTO test_table2 VALUES (:string, :number)")
                .parameters(Arrays.asList(
                        SqlParameter.builder().name("name1").value(Field.builder().stringValue("Hello").build()).build(),
                        SqlParameter.builder().name("name2").value(Field.builder().longValue(20L).build()).build()
                ))
                .continueAfterTimeout(true)
                .build();
        return rdsData.executeStatement(executeStatementRequest);
    } catch (BadRequestException | StatementTimeoutException | InternalServerErrorException | ForbiddenException
            | ServiceUnavailableErrorException dataException) {
        LOG.error("Execute statement failed: Error Message: {}, Cause: {}",
                dataException.getMessage(), dataException.getCause());
    }
    return null;
}