当前位置:   article > 正文

MySQL批处理 - executeBatch方法使用_ps.executebatch()是直接提交事务吗

ps.executebatch()是直接提交事务吗

1.假设使用事务:

 (1)不使用批处理而是一条一条的SQL语句发送给MySQL的方式,如果有很多语句这样执行,每次到要和MySQL通讯,开销太大;另一方面,这样执行的SQL语句如果中间有一条发送错误,后面的SQL语句是不会执行的,理解为抛出异常,后面的语句当然就不执行了

 (2)使用批处理方法,一次过将要执行的SQL语句发送给MySQL,MySQL的机制是:中间有语句错误,后面正确的语句还是会执行

2.假设不使用事务:这个简单,只要事务控制对了,中间有错的话都回滚就是了,后面的SQL语句就无所谓执不执行了

下面给一个executeBatch的Demo

  1. package cn.bl.v2;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.Statement;
  5. import org.junit.Test;
  6. import cn.bl.DBUtil;
  7. /**
  8. * 批处理
  9. * @author BarryLee
  10. * @2018年9月18日@下午11:15:50
  11. */
  12. public class Batch {
  13. //1.Statement方式
  14. @Test
  15. public void test1() throws Exception {
  16. Connection conn = DBUtil.getConnection();
  17. Statement st = conn.createStatement();
  18. for(int i = 0;i<10;i++) {
  19. //这个sql没什么意义,只是为了区分插入的不同数据罢了
  20. String sql1 = " insert into pp(name) values('xl"+i+"') ";
  21. st.addBatch(sql1);
  22. }
  23. //删除name以xl开头的记录
  24. String sql2 = " delete from pp where name like 'xl%' ";
  25. st.addBatch(sql2);
  26. int[]res = st.executeBatch();
  27. for (int i : res) {//每一行sql的影响记录数
  28. System.out.println(i);
  29. //sql1都是输出1
  30. //sql2对应的是10
  31. }
  32. }
  33. //2.PreparedStatement方式
  34. @Test
  35. public void test2() throws Exception {
  36. Connection conn = DBUtil.getConnection();
  37. String sql = " insert into pp(name) values(?) ";
  38. PreparedStatement pst = conn.prepareStatement(sql);
  39. for(int i = 0;i<10;i++) {
  40. pst.setString(1, "xl"+i);
  41. pst.addBatch();//这里不能带参
  42. }
  43. sql = " delete from pp where name like 'xl%' ";
  44. pst.addBatch(sql);
  45. int[]res = pst.executeBatch();
  46. for (int i : res) {//每一行sql的影响记录数
  47. System.out.println(i);
  48. //for循环里面添加的sql语句对应的都是输出1
  49. //最后一句对应的是10
  50. }
  51. }
  52. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/程序诗人/article/detail/61868
推荐阅读
相关标签
  

闽ICP备14008679号