2013-09-30 70 views
0

如果已經有主鍵的記錄不存在,我需要添加記錄;否則現有記錄將被更新。爲此,我正在用主鍵查詢數據庫。如果沒有記錄存在,我加入;否則更新。我使用原始JDBC以java編碼。決定添加或更新

有沒有更好的方法來做到這一點?

+1

使用Hibernate?或JDBC? –

+0

我正在使用JDBC – Abichellam

回答

4
  1. INSERT ... SELECT ...,其中不存在
  2. INSERT INTO ... VALUES ... ON重複鍵更新ID = ID
  3. REPLACE INTO ... SELECT ... FROM ...
2

最軟的方法是在My Sql中使用特殊查詢INSERT ... ON DUPLICATE KEY UPDATE查詢。它比檢查衝突存在於應用程序方面要有效得多。

例如代碼片段:

PreparedStatement statement = null; 
try { 
    statement = connection.prepareStatement(
     "INSERT INTO table (a,b,c) VALUES (?,?,?) ON DUPLICATE KEY UPDATE c=?;" 
    ); 
    int paramIndex = 1; 
    statement.setInt(parameterIndex++, primaryKeyValue); 
    statement.setInt(parameterIndex++, secondValue); 
    statement.setInt(parameterIndex++, thirdValue); 
    statement.setInt(parameterIndex++, thirdValue); 
    int updatedCount = statement.executeUpdate(); 
} finally { 
    statement.close(); 
} 
0

另一種方式是REPLACE INTO這需要同樣的語法INSERT但刪除舊條目時,主鍵插入之前已經存在。

0

最簡單也是最一般的方法是在插入/更新之前對記錄進行計數。

僞代碼:

SELECT COUNT(*) as recordCount FROM mytable WHERE keyField = ? 
if (recordCount > 0) { 
    UPDATE mytable SET value1=? WHERE keyField = ? 
} else { 
    INSERT INTO mytable (keyField, value1) VALUES (?, ?) 
}