如何快速将大数据传输到mysql(JDBC)?

时间:2017-08-25 22:26:03

标签: java mysql jdbc arraylist prepared-statement

我有一个代码,它管理ArrayList<priceItem>并使用preparedStatement将每个项目指向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分钟以上。我需要发送超过150K的物品。

1 个答案:

答案 0 :(得分:1)

许多改进此代码的方法:

  1. 创建较小的批次,以减少网络延迟。
  2. 使用事务管理器并提交批次。您的回滚段不应该与总事务一样大。
  3. 在finally块中关闭您的资源。