我正在使用“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 中运行它,它会返回第二条语句的受影响行数。即“1 行受影响”如果它执行插入,“0 行受影响”如果它执行更新。这是我所期望的。
但是,如果我使用 javax.persistence.Query 对象在 JDBC+JPA 上运行它,我会得到相反的行为:如果它执行更新,则返回 1,而插入则返回 0。
Java 行为是否可靠?即我可以对此进行编码,还是可能会随着驱动程序 jar 的未来版本而改变?
有没有更好的方法来编写 upsert,以便我还可以获取有关它执行了哪个操作的信息?
版本详情:我使用的是PostgreSQL 9.1,Java 6,JDBC驱动jar是postgresql-9.1-901.jdbc4.jar
谢谢您的帮助!