Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 决定添加或更新_Java_Mysql - Fatal编程技术网

Java 决定添加或更新

Java 决定添加或更新,java,mysql,Java,Mysql,如果已经有一个主键不存在的记录,我需要添加一个记录;否则将更新现有记录。为此,我使用主键查询数据库。如果没有记录,我将添加;否则将更新。我正在使用原始JDBC用java编写这段代码 有更好的方法吗?最软的方法是在我的Sql中使用特殊的查询。它比检查应用程序端是否存在冲突要有效得多 代码段,例如: PreparedStatement statement = null; try { statement = connection.prepareStatement( "INSER

如果已经有一个主键不存在的记录,我需要添加一个记录;否则将更新现有记录。为此,我使用主键查询数据库。如果没有记录,我将添加;否则将更新。我正在使用原始JDBC用java编写这段代码


有更好的方法吗?

最软的方法是在我的Sql中使用特殊的查询。它比检查应用程序端是否存在冲突要有效得多

代码段,例如:

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();
}

最软的方法是在我的Sql中使用特殊的查询。它比检查应用程序端是否存在冲突要有效得多

代码段,例如:

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();
}
另一种方法是采用与插入相同的语法,但在插入前主键已存在时删除旧条目。

另一种方法是采用与插入相同的语法,但在插入前主键已存在时删除旧条目

  • 插入…选择…不存在的位置
  • 插入到。。。价值观在重复密钥更新id=id时
  • 替换为。。。选择。。。从
  • 插入…选择…不存在的位置
  • 插入到。。。价值观在重复密钥更新id=id时
  • 替换为。。。选择。。。从

  • 最简单也是最通用的方法是在插入/更新之前对记录进行计数

    伪代码:

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

    最简单也是最通用的方法是在插入/更新之前对记录进行计数

    伪代码:

    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?使用hibernate??还是JDBC?