批处理——数据库
一、简介
1.1概念说明
批处理(batch)------------>好比快递员【不能一件一件的送快递】
- 批处理指的是一次操作中执行多条SQL语句
- 批处理相比于一次一次执行效率会提高很多
1.2步骤
- 批处理主要是分两步:
1.将要执行的SQL语句保存
2.执行SQL语句
Statement和PreparedStatement都支持批处理操作,这里我们只需要掌握PreparedStatement的批处理方式
1.3方法
void addBatch()
- 将要执行的SQL先保存起来,先不执行
- 这个方法在设置完所有的占位符之后调用
int[] executeBatch()
- 这个方法用来执行SQL语句,这个方法会将批处理中所有SQL语句执行
- mysql默认批处理是关闭的,所以我们还需要去打开mysql的批处理:
rewriteBatchedStatements=true
我们需要将以上的参数添加到mysql的url地址中
- 注意:低版本的mysql-jdbc驱动也不支持批处理,一般都是在修改的时候使用批处理,查询的时候不使用!
二、 案例演示
2.1创建一张新的数据表
CREATE TABLE t_emp( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(50) )
2.2在dao层编写数据库操作代码
package com.tyd.batch.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class UserDao { public void testBatch(){ //向t_emp表中插入10000条数据 //准备两个变量 Connection connection = null; PreparedStatement ps = null; try { //获取数据库连接 connection=JDBCUtil.getConnection(); //准备SQL模板 String sql = "INSERT INTO t_emp(NAME) VALUES(?)"; //获取PrepareStatement ps = connection.prepareStatement(sql); //创建一个for循环,来设置占位符 for(int i = 0; i < 10000 ;i++){ //填充占位符 ps.setString(1,"emp"+i); //添加到批处理方法中,调用无参的,有参的是Statement来调用的! ps.addBatch(); } //获取一个时间戳 long start = System.currentTimeMillis(); //执行批处理 ps.executeBatch(); //获取一个时间戳 long end = System.currentTimeMillis(); System.out.println("共花费了:"+(end-start)); } catch (SQLException e) { e.printStackTrace(); }finally{ JDBCUtil.close(connection, ps,null); } } }
2.3在main方法或test类中运行
public static void main(String[] args) { System.out.println("开始执行"); UserDao ud=new UserDao(); System.out.println("执行结束"); }
2.4在数据库中进行验证
SELECT * FROM t_emp;