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

Java 如何快速将大数据传输到mysql(JDBC)?,java,mysql,jdbc,arraylist,prepared-statement,Java,Mysql,Jdbc,Arraylist,Prepared Statement,我有一个代码,它管理ArrayList,并使用preparedStatement将每个项目导入MySQL。我不知道如何提高这段代码的速度。我试着使用.addBatch(),但没用。这是代码 try { connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); preparetStmt = connection.prepareStatement(INSERT_NEW); for (int i = 0

我有一个代码,它管理
ArrayList
,并使用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();
}
试试看{
connection=DriverManager.getConnection(URL、用户名、密码);
preparetStmt=连接。prepareStatement(插入新的);
对于(int i=0;i

请帮助我找到提高加载此语句速度的方法。对于1500个项目,它需要2分钟以上的时间。我需要发送超过15万个项目。

有很多方法可以改进此代码:

  • 创建较小的批处理,以减少网络延迟
  • 使用事务管理器并提交批处理。您的回滚段不应该像总事务那么大
  • 在finally块中关闭资源

  • 您必须使用JDBC还是直接访问数据库服务器?如果您有一个类似csv的文件,那么将批插入数据库会快得多。请检查文档中的addBatch()。你这样做看起来不对。网上也有批处理教程,你可以查看。解决这类问题需要备份,从已知的开始,到未知的工作。因此,很难找到人来帮助您。此外,您应该清楚这是一次性操作,还是典型的定期数据集移动。这会对模式、索引等产生影响。现在我使用JDBC并连接到本地主机,但将来我希望在站点上重新定位db。我使用ApachePoi提取excel数据并将其转换为arraylistMySQL,以便直接加载CSV数据。根本不需要让JDBC或Java参与其中。为什么要测试连接是否在不可能关闭的位置关闭,为什么要打印连接关闭时却没有关闭?