Java JDBC executeUpdate与executeBatch性能
我很想知道JDBC executeUpdate(multiQuerySqlString)与JDBC 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())
StringBuffer sb = new StringBuffer();
sb.append(updateQuery1+";");
sb.append(updateQuery2+";");
sb.append(insertQuery1+";");
statement.executeUpdate(sb.toString())
vs
您的示例中有两个问题:
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();