如果已存在主键不存在的记录,我需要添加记录;否则现有记录将被更新。为此,我使用主键查询数据库。如果没有记录,我补充说;否则更新。我使用原始JDBC在java中编码。
有更好的方法吗?
答案 0 :(得分:4)
答案 1 :(得分: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();
}
答案 2 :(得分:0)
另一种方式是REPLACE INTO,它采用与INSERT
相同的语法,但在插入前主键已存在时删除旧条目。
答案 3 :(得分: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 (?, ?)
}