主キーを持つレコードが存在しない場合は、レコードを追加する必要があります。それ以外の場合は、既存のレコードが更新されます。このために、主キーを使用してデータベースにクエリを実行しています。レコードが存在しない場合は、追加しています。それ以外の場合は更新します。生のJDBCを使用してJavaでこれをコーディングしています。
これを行うより良い方法はありますか?
The most soft way to do this is to use special query INSERT ... ON DUPLICATE KEY UPDATE query in My Sql. It is much more effective than check is conflict exist on the application side.
Code snippet for example:
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();
}
最も単純で一般的な方法は、挿入/更新の前にレコードをカウントすることです。
疑似コード:
SELECT COUNT(*) as recordCount FROM mytable WHERE keyField = ?
if (recordCount > 0) {
UPDATE mytable SET value1=? WHERE keyField = ?
} else {
INSERT INTO mytable (keyField, value1) VALUES (?, ?)
}