决定添加或更新

时间:2013-09-30 06:08:11

标签: java mysql

如果已存在主键不存在的记录,我需要添加记录;否则现有记录将被更新。为此,我使用主键查询数据库。如果没有记录,我补充说;否则更新。我使用原始JDBC在java中编码。

有更好的方法吗?

4 个答案:

答案 0 :(得分:4)

  1. 插入...选择...不存在的地方
  2. INSERT INTO ... VALUES ...重复KEY UPDATE id = id
  3. 替换为......选择......来自......

答案 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 (?, ?)
}