使用PreparedStatement实现批量插入操作,三种方法(批量插入2000条数据为例)
修改、删除本身具有批量操作效果
批量操作主要针对插入操作。
mysql服务器默认关闭批量处理操作的,需要通过一个参数让mysql开启批量处理操作,
将&rewriteBatchedStatementstrue写在配置文件的url后面,配置文件参考:
数据库连接的五种方式_qq_46053741的博客-CSDN博客
代码中jdbcConnection类的构造查看:封装数据库的连接关闭操作_qq_46053741的博客-CSDN博客
使用更新的mysql驱动:mysql-connector-java-5.1.37-bin.jar
goods表结构如下:
批量插入操作代码如下:
import java.sql.Connection;
import java.sql.PreparedStatement;
import org.junit.Test;
import com3preparedstatement.jdbc.jdbcConnection;
public class InsertTest {
//方法一:
@Test
public void testQuer1(){
//1、获取连接
Connection conn=null;
PreparedStatement ps=null;
try {
conn = jdbcConnection.connection();
//2、创建sql语句,实例化PreparedStatement对象
String sql="insert into goods(name)values(?)";
ps = conn.prepareStatement(sql);
//3、填充占位符
for(int i=0;i<2000;i++){
ps.setObject(1, "method1_"+i);
//4、执行
ps.execute();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//5、关闭资源
jdbcConnection.CloseResource(conn, ps);
}
//方法二:使用addBatch()、executeBatch()、clearBatch()函数,分批次提交sql语句
@Test
public void testQuery2(){
//1、获取连接
Connection conn=null;
PreparedStatement ps=null;
try {
conn = jdbcConnection.connection();
//2、创建sql语句,实例化PreparedStatement对象
String sql="insert into goods(name)values(?)";
ps = conn.prepareStatement(sql);
//3、填充占位符,攒sql语句分批次提交
for(int i=0;i<2000;i++){
ps.setObject(1,"method2_"+i);
//4、攒sql语句
ps.addBatch();
if(i%500==0){
//5、提交sql语句
ps.executeBatch();
//6、清空sql语句
ps.clearBatch();
}else if(i==1999){
ps.executeBatch();
}
}
} catch (Exception e) {
e.printStackTrace();
}
//7、关闭资源
jdbcConnection.CloseResource(conn, ps);
}
//方法三:一次性提交sql语句
@Test
public void testInsert3(){
//1、获取连接
Connection conn=null;
PreparedStatement ps=null;
try {
conn = jdbcConnection.connection();
//2、不自动提交
conn.setAutoCommit(false);
//3、创建sql语句,实例化PreparedStatement对象
String sql="insert into goods(name)values(?)";
ps = conn.prepareStatement(sql);
//4、填充占位符
for(int i=0;i<2000;i++){
ps.setObject(1,"method3_"+(i+1));
//5、"攒"sql
ps.addBatch();
//攒500条
if(i%500==0){
//6、执行
ps.executeBatch();
//7、清空batch
ps.clearBatch();
}
if(i==1999){
ps.executeBatch();
}
}
//7、提交数据
conn.commit();
} catch (Exception e) {
e.printStackTrace();
}finally{
//5、关闭资源
jdbcConnection.CloseResource(conn, ps);
}
}
}