Java 高效的多重SQL插入

Java 高效的多重SQL插入,java,sql,insert,performance,Java,Sql,Insert,Performance,将1000行插入一个表(jdbc/connector mysql数据库)的最佳/最省时的方法是什么?(它是一个缓冲区,每次满时都需要转储到数据库中) 1-一条自动生成/浓缩的SQL语句 2-对于(inti=0;i您可以使用JDBC批插入 PreparedStatement ps = cn.prepareStatement("INSERT INTO...."); for (int i = 0; i < 1000; i++) { ps.setString(1, "value-" +

将1000行插入一个表(jdbc/connector mysql数据库)的最佳/最省时的方法是什么?(它是一个缓冲区,每次满时都需要转储到数据库中)

1-一条自动生成/浓缩的SQL语句


2-
对于(inti=0;i您可以使用JDBC批插入

PreparedStatement ps = cn.prepareStatement("INSERT INTO....");

for (int i = 0; i < 1000; i++) {
    ps.setString(1, "value-" + i); // Set values
    ps.addBatch();                 // Add this to the batch
    ps.clearParameters();          // Reset the parameters
}

ps.executeBatch();
这两种方法都要小心,因为您可能会超过单个请求的最大数据包大小。您可能需要设置一个与缓冲区中条目数不同的批大小。例如,您可能需要将1000条条目分成10批,每批100条。

可能是性能的最佳选择。(#以上选项列表中的4条)虽然可能需要更多的代码来完成任务,因为您需要创建中间文件,但请将其发送到服务器,然后调用LOAD DATA将其发送到数据库中

MySql帮助页面引用:

LOAD DATA INFILE语句读取 将文本文件中的行以 非常高的速度


请注意,除非您明确告诉JDBC不要在每条语句后自动提交。这样做并在运行提交之前运行X INSERT,应该会大大提高性能。

请谨慎使用这种方法。我以前见过这样做的系统,以及创建中间文件并将其发送给se的成本服务器已经超过了使用快速文件加载操作的性能优势。这看起来非常危险,因为我们有两个应用程序服务器同时访问同一个数据库。我真的很害怕出现这个答案。谢谢大家的回复。我忘了写我使用的是c3p0。因此我必须在最后提交。
INSERT INTO x (a,b)
     VALUES ('1', 'one'),
            ('2', 'two'),
            ('3', 'three');