当前位置: 首页 > 知识库问答 >
问题:

在PostgreSQL中使用Java执行Upsert返回值时出错

鲁华灿
2023-03-14

我看过几篇关于这个主题的帖子(post1,post2,post3)。在所有这些问题中,解决方案看起来都很容易,但我无法得到返回值的值。

这是我到目前为止所尝试的:

备选办法1:

int affectedRows =pstmt.executeUpdate();    
    ResultSet rs = pstmt.getResultSet(); 
    if (rs.next())
        updated = rs.getBoolean(1); 
ResultSet rs =pstmt.executeQuery(); 
    if (rs.next())
        {updated = rs.getBoolean(1);}   

备选案文3:

boolean hasResult =pstmt.execute(); 
logger.info("hasResult: " + hasResult);
//if (hasResult) {
    ResultSet rs = pstmt.getResultSet(); 
    if (rs.next())
        updated = rs.getBoolean(1);             
//}
logger.info("updated: " + updated);

结果:java.lang.nullpointerException原因,如果(rs.next())还注意到hasresult:false

创建到Java代码中的查询如下所示:

INSERT INTO public."tablename"( "field1", "field2", ...,"field n")
VALUES('value1','value2',...,'value n') 
ON CONFLICT ("UniqueID") 
DO UPDATE SET "field1" = 'value3' ,..., "Updated"=true 
RETURNING "Updated"

<dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.2.12</version>
</dependency>
<dependency>
        <groupId>com.google.cloud.sql</groupId>
        <artifactId>postgres-socket-factory</artifactId>
        <version>1.0.15</version>
</dependency>

和连接字符串:

jdbc:postgresql://google/postgres?cloudSqlInstance=<...>&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=<...>&password=<...>

共有1个答案

那利
2023-03-14

问题就在这里:

PreparedStatement pstmt = conn.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);

在创建PreparedStatement pstmt对象时,我使用了statement.return_generated_keys

statement.return_generated_keys常量与getGeneratedKeys一起使用,以获得该执行所创建的所有行的自动生成键。

PreparedStatement pstmt = conn.prepareStatement(SQL);
 类似资料:
  • 我在试用GraphQL。我从postgresql中提取数据,除了一个问题,解析在查询完成之前就完成了,其他一切似乎都能正常工作。我以为我的查询承诺工作正常。这里是我为查询数据库而创建的类: 下面是我的graphql查询: 我注释了我的结果,只是想了解一下返回静态内容的情况,结果似乎在then()内时不会返回到graphisql(这意味着在then()之前完成的解析)。输出: } 我可以通过将静态返

  • 问题内容: 我没有从服务器获得JSON类型数据的响应。 我正在使用JSON插件。 如果我没有得到任何回应,但是如果我没有任何回应,那么我正在获取页面的HTML格式。 控制台错误: -找不到动作或结果没有为动作action.Part和结果定义结果。 我没有获得有关jQuery成功的数据。请纠正我,这是怎么了? 问题答案: 使用A 来指定在执行操作和结果时从回调函数返回的数据类型,以及从服务器返回的响

  • 问题内容: 愚蠢但简单的示例:假设我有一个表“ Item”,其中保存接收到的项目的总数。 项目名称是此处的主键。每当我收到数量为X的物料A时,如何实现以下目标。 如果该商品不存在,则为商品A插入一个新的摘要,并将库存商品设置为X;如果存在一条记录,其中库存商品为Y,则库存商品的新值为(X + Y) 我的问题是我的实际表中有多个列。在更新部分中编写多个select语句是一个好主意吗? 我当然可以用代

  • 原文是这样的: 这确实令人惊讶,但最终明白了(嗯,至少我想我明白了)为什么会这样发生。 现在,我将第二个更改为: 如果我遗漏了一些明显的东西,或者我的问题是愚蠢的,让我提前说声对不起。还有谢谢你!

  • 问题内容: 我有一个Android应用程序项目,突然停止工作。显然没有错误,但是当我尝试启动时,我得到了: 执行Aapt时出错:返回码139 我试图清理该项目及其相关的库项目,重新启动Eclipse,更新为最新的ADT和SDK版本,等等,但是都失败了。有时我还会遇到其他错误(不进行任何更改): 生成最终归档文件时出错:java.io.FileNotFoundException:… / bin /

  • 问题内容: 在运行该行之后,在指令指针返回到调用函数之前,是否可以看到方法的返回值? 我正在调试无法修改的代码 (阅读:不想重新编译第三方库) ,有时它会跳转到我没有源代码的代码,或者return表达式具有使我无法继续工作的副作用只需在“ 显示” 标签中运行表达式即可。 通常在复合语句中使用返回值,因此 Variables 视图将永远不会向我显示该值(因此希望在控件返回到调用函数之前先查看结果)。