使用PreparedStatement实现批量插入操作,三种方法(批量插入2000条数据为例)


修改、删除本身具有批量操作效果
批量操作主要针对插入操作。
mysql服务器默认关闭批量处理操作的,需要通过一个参数让mysql开启批量处理操作,
将&rewriteBatchedStatementstrue写在配置文件的url后面,配置文件参考:

数据库连接的五种方式_qq_46053741的博客-CSDN博客

代码中jdbcConnection类的构造查看:封装数据库的连接关闭操作_qq_46053741的博客-CSDN博客
使用更新的mysql驱动:mysql-connector-java-5.1.37-bin.jar

goods表结构如下:

使用PreparedStatement实现批量插入操作,三种方法(批量插入2000条数据为例)_第1张图片

 批量插入操作代码如下:


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);
		}
	}

}

你可能感兴趣的:(JDBC,java,开发语言,sql,mysql,数据库)