我有一个代码,该代码管理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块中关闭资源。

07-27 21:21