Java 高效的多重SQL插入
将1000行插入一个表(jdbc/connector mysql数据库)的最佳/最省时的方法是什么?(它是一个缓冲区,每次满时都需要转储到数据库中) 1-一条自动生成/浓缩的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-" +
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');