JDBC批处理操作

1.啥是JDBC的批处理:相对不是批处理操作而言,批处理操作效率更高了。

小故事:之前学生放学坐班车回家,假设而这个学校有1000名学生,每次班车?每次送一个学生,需要往返1000次才能完全送完

              现在学生放学坐班车回家,假设而这个学校有1000名学生,每次班车?送100个学生,只需要往返10次就能送完

结论:相比之前效率提高了100倍  我的天那 是不是很厉害的样子

 

1.JDBC的处理批处理的两个方法

addBatch(String)//添加需要批处理的SQL或者参数

eexcuteBatch()//开始执行批处理操作

 2.两种批处理SQL语句操作

 2.1 静态SQL--Statement 存储引擎:(InnoDB:   MyISAM)

 多条静态SQL语句的批量处理:Statement    //多条不同的sql 同时执行

加载驱动

获取连接对象

state=conn.createStatement();//获取语句对象

 for(int i=0; i<10000; i++){

  String sql;//SQL语句是不变的

  state.addBatch(sql);//往内存中批量添加所有的SQL--往袋子装 撞满为止

if(i%200==0){//袋子中只能装200个 --袋子装满了 批量执行一次

state.ceexcuteBatch();//执行所有的SQL--把袋子中的sql执行完。

state.ClearBach()//清除批量操作的缓存

}

 }

最后释放资源

结论:1.执行静态SQL 相对mysql数据库 MyISAM的存储时间比不使用批处理的进行插入数据的时间要长

          2.执行静态SQL 相对mysql数据库 InnoDB的存储时间比不使用批处理的进行插入数据的时间几乎一致

          3. 执行静态SQL 相对mysql数据库    MyISAM执行SQL的时间要比 InnoDB的时间要少很多  

2.2 动态SQL--prepareStatement 存储引擎:(InnoDB:   MyISAM)

 一条SQL语句的批量传参处理:PrepareStatement  //sql的模版完全相同,不同在于sql的参数,插入一千条数据 每天数据的参数是不一样的

加载驱动

获取连接对象

PeraperState=conn.createStatement();//获取语句对象

String sql(?,?);//SQL语句中的参数是变化的

 for(int i=0; i<10000; i++){

//设置参数

PeraperState,setString(1,"abc");

PeraperState.setLong(2,i);

 

  PeraperState.addBatch();//添加进入批处理

if(i%200==0){//每进入200个 批量执行一次

state.ceexcuteBatch(sql);//执行所有加进来的SQL

state.ClearBach()//清除批量操作的缓存

}

 }

最后释放资源

结论:1.执行静态SQL 相对mysql数据库 MyISAM的存储时间比不使用批处理的进行插入数据的时间要长

          2.执行静态SQL 相对mysql数据库 InnoDB的存储时间比不使用批处理的进行插入数据的时间几乎一致

          3. 执行静态SQL 相对mysql数据库    MyISAM执行SQL的时间要比 InnoDB的时间要少很多  

种种现象表明 mysql不支持 批量处理  很无奈  貌似很高大上的API 到头来 有种费力不讨好的感觉  欲哭无泪

但是可以通过配置驱动的方式让mysql 支持批处理操作  但是只对动态SQL有效 --prepareStatement

在JDBC配置文件中的添加一个参数 URL=jdbc:mysql://localhost:3306/jdbc?rewriteBatchedStatements=true

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值