Java 如何使用ExecuteBack提高性能?

Java 如何使用ExecuteBack提高性能?,java,jdbc,Java,Jdbc,我正在编写Java代码,用于将45000条记录插入表中 我使用的代码如下: //create Db Connection List<String> sqlInsertQueries = getListOfInsertsQueries(); for (String currentsql : sqlInsertQueries) { stmt.addBatch(currentsql); } stmt.executeBatch(); conn.commit(); //创建数据库连接 L

我正在编写Java代码,用于将45000条记录插入表中 我使用的代码如下:

//create Db Connection
List<String> sqlInsertQueries = getListOfInsertsQueries();
for (String currentsql : sqlInsertQueries)
{
  stmt.addBatch(currentsql);
}
stmt.executeBatch();
conn.commit();
//创建数据库连接
List sqlInsertQueries=GetListofInertQueries();
for(字符串currentsql:sqlinsertquerys)
{
stmt.addBatch(currentsql);
}
stmt.executeBatch();
conn.commit();
这段代码非常慢,几乎需要5分钟才能完成


有没有办法让它更快地工作?

您应该确保自动提交为false,并使用准备好的语句。 准备好的语句可用于插入和更新

connection con.setAutoCommit(false);  
PreparedStatement prepStmt = con.prepareStatement("INSERT INTO table (val1,val2) VALUES (?,?)");

for all values:
  prepStmt.setString(1,val1);
  prepStmt.setString(2,val2);
  prepStmt.addBatch();    

stmt.executeBatch(); 
conn.commit(); 

如果从业务角度来看可以进行部分插入的话,我也会每1000次插入一次commit语句,因为预写日志可能会变得太大。谢谢,现在花了10秒,但为什么会这样;prepare语句和regular语句之间有什么大区别?另外,请确保您使用的是新版本的JDBC驱动程序,并将&rewriteBatchedStatements=true添加到连接字符串中。更多好的提示:在这里寻找性能差异的解释