gpt4 book ai didi

java - 通过 JDBC/JPA 在 PostgreSQL 中更新插入(更新+插入)返回奇怪的行计数

转载 作者:行者123 更新时间:2023-12-01 15:24:41 27 4
gpt4 key购买 nike

我正在使用“upsert”,我需要知道它是否创建了新行。SQL 的形式为:

update mytable set col1='value1' where (col2='value2');
insert into mytable select 'value1', 'value2' where not exists (select 1 from mytable where (col2='value2'));

如果我在 Postgres 中运行它,它会返回第二条语句受影响的行数。 IE。如果执行插入,则“1 行受影响”;如果执行更新,则“0 行受影响”。这正是我所期望的。

但是,如果我使用 javax.persistence.Query 对象通过 JDBC+JPA 运行它,我会得到相反的行为:如果执行更新,则返回 1,如果执行插入,则返回 0。

Java 的行为可靠吗?IE。我可以针对它进行编码吗?或者它是否会随着驱动程序 jar 的 future 版本而改变?

有没有更好的方法来编写更新插入,以便我也能获取有关它执行的操作的信息?

版本详细信息:我使用的是 PostgreSQL 9.1、Java 6,JDBC 驱动程序 jar 是 postgresql-9.1-901.jdbc4.jar

感谢您的帮助!

最佳答案

在 Java 中,您应该能够根据 JDBC API 文档获取每个语句的行数:

http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#execute%28java.lang.String%29

PostgreSQL 文档提供了一个在 plpgsql 函数中完成此操作的示例:

http://www.postgresql.org/docs/9.1/interactive/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING

查找 merge_db() 代码示例。

关于java - 通过 JDBC/JPA 在 PostgreSQL 中更新插入(更新+插入)返回奇怪的行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10338789/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com