java - 使用批量插入向数据库插入大量数据

标签 java mysql database sql-insert batch-insert

我创建了一个向 MySql 数据库插入数百万个值的程序。 我读到有关批量插入的信息,它可以优化我的程序并使其更快,但是当我尝试这样做时,它以相同的方式工作。 我没有将每个值插入数据库,而是每次将 500 个值保存在一个列表中,然后将它们插入一个大循环中,如下所示:

for(int i=0;i<500;i++)
{
   insertData(list.get(i));
}

然后我删除列表中的所有值并再次开始收集 500 个值。 效果不是更好吗?
我的插入代码是:

public void insertToNameTable(String id,String name) throws SQLException
       {
           PreparedStatement ps=null;

            ps= conn.prepareStatement("INSERT INTO NameTable values(?,?,?)",user.getId(),user.getName());


            ps.setString(1,id);
            ps.setString(2,name);
            ps.setBoolean(3,false);
            ps.executeUpdate();

       }

我有一些问题:
1.为什么批量插入时速度不快?
2.每次输入多少个值才能更快?(500,1000,10000)一起输入越多越好?
3. 将值插入数据库的方式是最好的方式吗?

最佳答案

这是批量插入的有效方式。

Connection connection = new getConnection();
Statement statement = connection.createStatement();
 
for (String query : queries) {
    statement.addBatch(query);
}
statement.executeBatch();
statement.close();
connection.close();

关于java - 使用批量插入向数据库插入大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27542333/

相关文章:

php - 如何检查metakey是否存在wordpress

mysql - 如何更新您在 SELECT 语句中使用的同一个表

javascript - 如何获取 ID 作为值和名称以显示在 dropdownlist php 中

database - 针对代码版本测试和管理数据库版本

database - 锁定表行以防止数据修改

Java - 为什么 java.lang.RuntimeException 或其子类不强制我们在 try/catch 中编写代码

java - JSF 不是 Richfaces 的 a4j 的有效方法表达式 :ajax listener

php - 数据不在表中的相关子查询

java - 使用 Java 服务器连接两部 Android 手机

java - Maven 可以运行非构建任务吗?