如果已經有主鍵的記錄不存在,我需要添加記錄;否則現有記錄將被更新。爲此,我正在用主鍵查詢數據庫。如果沒有記錄存在,我加入;否則更新。我使用原始JDBC以java編碼。決定添加或更新
有沒有更好的方法來做到這一點?
如果已經有主鍵的記錄不存在,我需要添加記錄;否則現有記錄將被更新。爲此,我正在用主鍵查詢數據庫。如果沒有記錄存在,我加入;否則更新。我使用原始JDBC以java編碼。決定添加或更新
有沒有更好的方法來做到這一點?
最軟的方法是在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();
}
另一種方式是REPLACE INTO這需要同樣的語法INSERT
但刪除舊條目時,主鍵插入之前已經存在。
最簡單也是最一般的方法是在插入/更新之前對記錄進行計數。
僞代碼:
SELECT COUNT(*) as recordCount FROM mytable WHERE keyField = ?
if (recordCount > 0) {
UPDATE mytable SET value1=? WHERE keyField = ?
} else {
INSERT INTO mytable (keyField, value1) VALUES (?, ?)
}
使用Hibernate?或JDBC? –
我正在使用JDBC – Abichellam