一. 事务的基本概念
1. 什么是事务
事务是不可分割的操作,每条sql语句都是一个事务;事务只对DML语句有效,对DQL无效。
2. 事务的ACID
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
3. 假设这里有一个需求体现了事务
二. 批处理
1. 什么是批处理
一次性执行多条sql语句,允许多条语句一次性提交给数据库批量处理,比单独提交处理效率搞。
2. 批处理方法
addBatch(String):添加需要批处理的SQL语句;
executeBatch():执行批处理
3. 举例
(1)新建立一个类BatchTest
1 package com.test.jdbctest.dao.test; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.SQLException; 6 7 8 import com.test.jdbctest.util.JDBCUtil; 9 10 public class BatchTest { 11 public static void main(String args[]) { 12 Connection connection=JDBCUtil.getConnection(); 13 String sql="insert into table1(name,age) values(?,?)"; 14 PreparedStatement ps; 15 try { 16 ps = connection.prepareStatement(sql); 17 long begin=System.currentTimeMillis(); 18 for(int i=0;i<1000;i++) { 19 ps.setString(1,"zs" ); 20 ps.setInt(2, 10); 21 ps.executeUpdate(); 22 } 23 long end=System.currentTimeMillis(); 24 long time=end-begin; 25 System.out.println(time); 26 JDBCUtil.close(connection, ps, null); 27 } catch (SQLException e) { 28 // TODO Auto-generated catch block 29 e.printStackTrace(); 30 } 31 32 } 33 34 }
4481
倘若使用批处理:
note:需要在url中添加一个参数:
public static String url="jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true";
1 package com.test.jdbctest.dao.test; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.SQLException; 6 7 8 import com.test.jdbctest.util.JDBCUtil; 9 10 public class BatchTest { 11 public static void main(String args[]) { 12 Connection connection=JDBCUtil.getConnection(); 13 String sql="insert into table1(name,age) values(?,?)"; 14 PreparedStatement ps; 15 try { 16 ps = connection.prepareStatement(sql); 17 long begin=System.currentTimeMillis(); 18 for(int i=0;i<1000;i++) { 19 ps.setString(1,"zs" ); 20 ps.setInt(2, 10); 21 //添加到批处理 22 ps.addBatch(); 23 } 24 //执行批处理 25 ps.executeBatch(); 26 long end=System.currentTimeMillis(); 27 long time=end-begin; 28 System.out.println(time); 29 JDBCUtil.close(connection, ps, null); 30 } catch (SQLException e) { 31 // TODO Auto-generated catch block 32 e.printStackTrace(); 33 } 34 35 } 36 37 }
42
参考文献
https://ke.qq.com/course/339214