Java JDBC executeUpdate与executeBatch性能

Java JDBC executeUpdate与executeBatch性能,java,sql,database,jdbc,Java,Sql,Database,Jdbc,我很想知道JDBC executeUpdate(multiQuerySqlString)与JDBC executeBatch()在执行多个更新/插入查询时的性能差异 例如: StringBuffer sb = new StringBuffer(); sb.append(updateQuery1+";"); sb.append(updateQuery2+";"); sb.append(insertQuery1+";"); statement.executeUpdate(sb.toString())

我很想知道JDBC executeUpdate(multiQuerySqlString)与JDBC executeBatch()在执行多个更新/插入查询时的性能差异

例如:

StringBuffer sb = new StringBuffer();
sb.append(updateQuery1+";");
sb.append(updateQuery2+";");
sb.append(insertQuery1+";");
statement.executeUpdate(sb.toString())
vs


您的示例中有两个问题:

  • 多重查询字符串易受攻击,因为您将自行操作查询
  • 您的批处理更新错误。您正在重新签名变量prepared语句。请参见此处的正确使用方法:
  • BatchInsert的示例:

    dbConnection.setAutoCommit(false);//commit trasaction manually
    
    String insertTableSQL = "INSERT INTO DBUSER"
            + "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) VALUES"
            + "(?,?,?,?)";
    PreparedStatement = dbConnection.prepareStatement(insertTableSQL);
    
    preparedStatement.setInt(1, 101);
    preparedStatement.setString(2, "mkyong101");
    preparedStatement.setString(3, "system");
    preparedStatement.setTimestamp(4, getCurrentTimeStamp());
    preparedStatement.addBatch();
    
    preparedStatement.setInt(1, 102);
    preparedStatement.setString(2, "mkyong102");
    preparedStatement.setString(3, "system");
    preparedStatement.setTimestamp(4, getCurrentTimeStamp());
    preparedStatement.addBatch();
    preparedStatement.executeBatch();
    
    dbConnection.commit();
    
    批处理可能比一系列
    executeUpdate
    (etc)语句更快,因为批处理减少了Java数据库的往返次数,并可能使其他优化成为可能

    但是,实际的性能差异将取决于您使用的JDBC驱动程序和后端数据库


    获得适用于您的(假设的)用例的答案的唯一方法是使用实际数据库、驱动程序、SQL和数据集对实现操作的两种可选方法进行基准测试。

    如果批处理使用不当,它将仅以这种方式执行最后一个查询。和
    分隔语句在技术上是JDBC不允许的(尽管有些驱动程序确实支持它)。
    
    dbConnection.setAutoCommit(false);//commit trasaction manually
    
    String insertTableSQL = "INSERT INTO DBUSER"
            + "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) VALUES"
            + "(?,?,?,?)";
    PreparedStatement = dbConnection.prepareStatement(insertTableSQL);
    
    preparedStatement.setInt(1, 101);
    preparedStatement.setString(2, "mkyong101");
    preparedStatement.setString(3, "system");
    preparedStatement.setTimestamp(4, getCurrentTimeStamp());
    preparedStatement.addBatch();
    
    preparedStatement.setInt(1, 102);
    preparedStatement.setString(2, "mkyong102");
    preparedStatement.setString(3, "system");
    preparedStatement.setTimestamp(4, getCurrentTimeStamp());
    preparedStatement.addBatch();
    preparedStatement.executeBatch();
    
    dbConnection.commit();