java JDBC插入多行
我现在使用的是批处理:
String query = "INSERT INTO table (id, name, value) VALUES (?, ?, ?)";
PreparedStatement ps = connection.prepareStatement(query);
for (Record record : records) {
ps.setInt(1, record.id);
ps.setString(2, record.name);
ps.setInt(3, record.value);
ps.addBatch();
}
ps.executeBatch();
我只是想知道上面的代码是否等同于下面的代码。如果不是,哪个更快
String query = "INSERT INTO table (id, name, value) VALUES ";
for (Record record : records) {
query += "(" + record.id + ",'" + record.name + "'," + record.value + "),";
}
query = query.substring(1, query.length() - 1);
PreparedStatement ps = connection.prepareStatement(query);
ps.executeUpdate();
# 1 楼答案
如果您的记录大小小于或等于1000,则以下代码优于这两种代码:
这样,您就可以使用PreparedStatement,并在一个insert查询中使用多个values子句根据记录列表的大小动态创建它
# 2 楼答案
首先,使用查询字符串连接,不仅会丢失PreparedStatement方法本机的类型转换,而且还容易受到数据库中执行的恶意代码的攻击
第二,PreparedStatements以前缓存在数据库本身中,这已经比普通语句有了很好的性能改进
# 3 楼答案
我想这个就行了
因为您必须对每个要插入数据库的记录执行查询
# 4 楼答案
关闭自动提交
只要将autocommit设置为false,那么
executeBatch
将比executeUpdate
具有更好的性能:# 5 楼答案
如果要插入的项目数量很大,则可能会面临严重的性能问题。因此,更安全的做法是定义批量大小,并在达到批量大小时持续执行查询
下面的示例代码应该可以使用。有关如何有效地使用此代码的完整故事,请参见link
# 6 楼答案