![](/img/trans.png)
[英]PostgreSQL and JDBC: Is `UPDATE table … RETURNING … INTO` supported?
[英]Upsert (update+insert) in PostgreSQL via JDBC / JPA returning strange row-count
我正在使用“ 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
謝謝您的幫助!
在Java中,您應該能夠根據JDBC API文檔獲取每個語句的行數:
http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#execute%28java.lang.String%29
PostgreSQL文檔提供了一個在plpgsql函數中完成此操作的示例:
查找merge_db()代碼示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.