JDBC事务机制
首先得到数据库的连接(之前已经写过了)这也是最基本的
JDBC事务是默认提交的,要想了解可以设置为非自动提交 数据库连接里面有个方法是setAutoCommit(boolean autoCommit)
当设置为false的时候需要手动提交。
设置手动提交之后 多条sql操作可以属于一个事务,要成功多条都能成功、要是失败都会回滚。
也可以设置一个savePoint()对于某个操作进行回滚,
eg:
1 public static void add(){ 2 conn = ConnectionUtils.getConnection(); 3 try { 4 conn.setAutoCommit(false); 5 } catch (SQLException e1) { 6 e1.printStackTrace(); 7 } 8 String sql = "insert into user (username,password,contract,address) values('张三','123','1ssssad','河岸扶沟')"; 9 try { 10 11 ps = conn.prepareStatement(sql); 12 ps.executeUpdate(); 13 } catch (SQLException e) { 14 e.printStackTrace(); 15 } 16 17 Savepoint save = null; 18 try { 19 save = conn.setSavepoint(); 20 } catch (SQLException e1) { 21 e1.printStackTrace(); 22 } 23 24 String sql2 ="insert into province (provience)values('测试')"; 25 26 try { 27 ps = conn.prepareStatement(sql2); 28 ps.executeUpdate(); 29 } catch (SQLException e) { 30 e.printStackTrace(); 31 } 32 try { 33 conn.rollback(save); 34 conn.commit(); 35 } catch (SQLException e) { 36 e.printStackTrace(); 37 } 38 }
回滚之后第一个操作已经回滚了,第二个操作提交了
如果你没有设置存储点,会回滚到设置禁止事务自动提交的地方,
因为是先设置禁止自动提交的然后才执行sql语句的,所以会回滚到所有执行的这几个sql语句前的状态。