【问题标题】:Using AWS Aurora data api for java with AWS Sdk for Java 2.x将适用于 java 的 AWS Aurora 数据 api 与适用于 Java 2.x 的 AWS Sdk 结合使用
【发布时间】:2021-03-22 07:07:33
【问题描述】:

我一直在尝试使用我的 lambda 中的 Aurora aws 数据 API 来执行一些操作,例如在表上插入和更新。我面临的问题是官方doc 仅提供有关使用AWS SDK for Java 1.x 版的详细信息。与版本 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);
}

【问题讨论】:

    标签: java amazon-web-services aws-lambda amazon-aurora aws-aurora-serverless


    【解决方案1】:

    所以我浏览了 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;
    }
    

    【讨论】:

    • 是吗? name1 真的链接到 :string 吗?
    • @jpell 你的问题是什么,我不明白
    • sql查询中参数“name1”在哪里?
    • 好吧,所以查询不正确,我只是提供了一个示例代码供其他人参考,以防他们无法确定要使用的方法和类。
    猜你喜欢
    • 2020-06-12
    • 2021-02-13
    • 2022-06-26
    • 2018-07-16
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    相关资源
    最近更新 更多