我有一个代码,该代码管理ArrayList<priceItem>
并使用prepareStatement将每个项目直接导入MySQL。我不知道如何提高此代码的速度。我尝试使用.addBatch()
,但没有帮助。这是代码。
try {
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
preparetStmt = connection.prepareStatement(INSERT_NEW);
for (int i = 0; i < priceItems.size(); i++) {
preparetStmt.setString(1, priceItems.get(i).getName());
preparetStmt.setString(2, priceItems.get(i).getQuantity());
preparetStmt.setString(3, priceItems.get(i).getCost());
preparetStmt.setString(4, priceItems.get(i).getAnnotation());
preparetStmt.addBatch();
}
preparetStmt.executeBatch();
if (!connection.isClosed()) {
System.out.print("DB is closed.");
}
} catch (SQLException e) {
e.printStackTrace();
}
帮助我找到提高加载此语句速度的方法。对于1500件商品,耗时超过2分钟。我需要发送超过15万个项目。
最佳答案
许多改进此代码的方法:
创建较小的批次,以减少网络延迟。
使用事务管理器并提交批处理。回滚段不应与总交易一样大。
在finally块中关闭资源。