您的位置:首页 > 数据库 > MySQL

mysql批量插入addBatch()与addBatch(sql)比较

2018-01-22 18:01 429 查看
使用mysql驱动mysql-connector-java-5.1.3,通过wireshark抓包分析结果:

1.使用addBatch(sql):

Class.forName("com.mysql.jdbc.Driver");//指定连接类型
Connection con = DriverManager.getConnection(url, username, password);

PreparedStatement pst = con.prepareStatement("");
for (int i = 0; i < 10; i++) {
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO extenal_studentcj(grade,clazz,zkzh,NAME,scoretext,times) VALUES(");
sql.append("'").append(i).append("',");
sql.append("'").append(i).append("',");
sql.append("'").append(i).append("',");
sql.append("'").append(i).append("',");
sql.append("'").append(i).append("',");
sql.append("'").append(i).append("'");
sql.append(");");

pst.addBatch(sql.toString());
}

pst.executeBatch();
pst.close();
con.close();


执行结果:





可以看见其实客户端发送到mysql服务端其实是发送了10次;

1.使用addBatch():

Class.forName("com.mysql.jdbc.Driver");//指定连接类型
Connection con = DriverManager.getConnection(url, username, password);

String sql = "INSERT INTO extenal_studentcj(grade,clazz,zkzh,NAME,scoretext,times) VALUES(?,?,?,?,?,?)";
PreparedStatement pst = con.prepareStatement(sql);
for (int i = 0; i < 10; i++) {
int idx = 1;
pst.setString(idx++, i + "");
pst.setString(idx++, i + "");
pst.setString(idx++, i + "");
pst.setString(idx++, i + "");
pst.setString(idx++, i + "");
pst.setLong(idx++, i);
pst.addBatch();
}
pst.executeBatch();
pst.close();
con.close();


可见客户端只发送了一次到mysql服务端;
3.结论使用mysql进行批量插入的时候,需要使用addBatch(),使用addBatch(sql)性能比较低;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: