簡體   English   中英

JDBC 插入或更新實踐

[英]JDBC insert or update practice

如果記錄不存在,我需要將記錄插入到表中,如果記錄存在於表中,我需要更新記錄。 當然,我可以寫:p-code:

SELECT * FROM table1 WHERE id='abc' by JDBC
if(exists)
   UPDATE table1 SET ... WHERE id='abc' by JDBC;
else
   INSERT INTO table1... by JDBC;

但是,我認為代碼並不優雅。 或者,我也可以這樣寫:p-code:

int row = Statement.executeUpdate("INSERT INTO table1...", 2);
if(row==0)
  update table1 SET ... WHERE id='abc' by JDBC;

您認為后一種方式更好更快嗎? 謝謝!

編輯:在 MYSQL

這取決於您使用的數據庫類型以及您是否可以利用數據庫的特定功能。 例如,MySQL 允許您執行以下操作:

INSERT INTO territories (code, territory) VALUES ('NO', 'Norway')
ON DUPLICATE KEY UPDATE territory = 'Norway'

但是,上述內容不符合標准 (SQL-92)。 也就是說,它很可能不適用於所有數據庫。 換句話說,您必須堅持使用您編寫的代碼。 它可能看起來不那么優雅,但它可能是 go 最安全的解決方案。

您可能希望查看使用 DBMS 在單個語句中進行檢查,即使用 SQL EXISTS 條件: WHERE EXISTSWHERE NOT EXISTS

也許您正在使用的數據庫具有插入或更新功能,可以自動為您解決這個問題。 例如,在 DB2 中,您可以使用 MERGE INTO。 這里

這可能是切換到流行的 ORM 解決方案(Hibernate、Toplink、iBatis)之一的原因。 這些工具“了解”各種 SQL 方言並相應地優化您的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM