2011-06-06 31 views
10

如果記錄不存在,我需要插入一條記錄到表,如果記錄存在表中,則需要更新記錄。 當然,我可以寫: p代碼:JDBC插入或更新練習

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代碼:

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

你認爲後者的方式是更好,更快?謝謝!

編輯:在MYSQL

回答

10

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

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

但是,以上不符合標準(SQL-92)。也就是說,它很可能不適用於所有數據庫。換句話說,你必須堅持寫下你的代碼。它可能看起來不那麼優雅,但它可能是最安全的解決方案。

4

你可能想看看使用DBMS做一個語句中的檢查,即使用SQL EXISTS條件:WHERE EXISTSWHERE NOT EXISTS

2

也許你正在使用的數據庫有一個插入或更新功能,它會自動爲您解決這個問題。在DB2中,可以使用MERGE INTO作爲例子。請參閱here

1

這可能是切換到流行的ORM解決方案之一(Hibernate,Toplink,iBatis)的原因。這些工具可以「瞭解」各種SQL方言,並可以順暢地優化您的查詢。