Java 示例 - 保存点和回滚的使用

  • 问题描述

    如何在 Java 中创建保存点和回滚?
  • 解决方案

    以下示例使用回滚连接方法回滚到以前保存的 SavePoint。
    
    import java.sql.*;
    public class jdbcConn {
       public static void main(String[] args) throws Exception {
          Class.forName("org.apache.derby.jdbc.ClientDriver");
          Connection con = DriverManager.getConnection(
             "jdbc:derby://localhost:1527/testDb","name","pass");
          
          Statement stmt = con.createStatement();
          String query1 = "insert into emp values(5,'name','job')";
          String query2 = "select * from emp";
          
          con.setAutoCommit(false);
          Savepoint spt1 = con.setSavepoint("svpt1");
          stmt.execute(query1);
          ResultSet rs = stmt.executeQuery(query2);
          int no_of_rows = 0;
          
          while (rs.next()) {
             no_of_rows++;
          }
          System.out.println("rows before rollback statement = " + no_of_rows);
          con.rollback(spt1);
          con.commit();
          no_of_rows = 0;
          rs = stmt.executeQuery(query2);
          
          while (rs.next()) {
             no_of_rows++;
          }
          System.out.println("rows after rollback statement = " + no_of_rows);
       }
    }
    
  • 结果

    上面的代码示例将产生以下结果。结果可能会有所不同。
    
    rows before rollback statement = 4
    rows after rollback statement = 3