JDBC 实现事务的回滚

来源:互联网 发布:linux kernel 编辑:程序博客网 时间:2024/05/21 22:49

使用JDBC操作事务

      再java项目中导入jar包  ——mysql-connector-java-5.1.7-bin.jar;

           Connection 客户端连接对象

         1.  Connection.setAutoCommit(boolean );//设置自动提交模式,false表示禁用自动提交模式;

         2.    用Savepoint对象的setSavapoint(String name);

         3    rollback()取消在当前事务中进行的所有更改;

         4. rollback (Savepoint )//回退到保存点 状态;

         5. commit ()提交事务;

          啥也不说了直接上代码;

Connection conn = null;
PreparedStatement ps = null;
PreparedStatement ps2 = null;
PreparedStatement ps3 = null;
ResultSet rs = null;
try {
// 反射加载sql驱动
Class.forName("org.gjt.mm.mysql.Driver");
// 获得一个客户端
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/day32", "root", "123456");
// 预加载sql语句
ps = conn.prepareStatement("update student set age=30 where name='rose'");
ps2 = conn.prepareStatement("update student set age=35 where name='jock'");
ps3 = conn.prepareStatement("select * from student");
// 设置自动提交事务为false;//手动提交
conn.setAutoCommit(false);
// 提交预加载sql语句
ps.executeUpdate();
ps2.executeUpdate();
// conn.rollback();
// 提交事务
conn.commit();
rs = ps3.executeQuery();
while (rs.next()) {
int age = rs.getInt("age");
String name = rs.getString("name");
System.out.println("age :" + age + " name " + name);
}


} catch (Exception e) {
e.printStackTrace();


} finally {
try {
ps.close();
ps2.close();
ps3.close();
conn.close();
} catch (Exception e2) {
}
}

   //未执行rollback();打印结果如下

   

   //执行rollback();

            //改变了rose的age 和jock的年纪 


      //答应结果如下并未改变 说明rollback 方发执行后之前事务中的代码被清空

     

      二 。回滚的第二种方式 

            在要保存在点 创建一个SavePoint 对象    当使用collback(Savepoint)对象方法后 保存点之后的代码被清空;

           

             


//当事务回滚后jock的值没有改变;


0 0
原创粉丝点击