JDBC的事务处理

时间:2022-08-06 12:02:30

事务,也是数据库事务,指的是作为单个逻辑工作单元执行的一系列操作。正常的情况下,操作应该顺利进行,与操作相关的所有数据库信息也成功地更新;比如银行转账这个事件;

但是,如果在这一系列过程中任何一个环节出了差错,导致操作失败了,数据库中所有信息都必须保持操作前的状态不变。否则,数据库的信息将会一片混乱而不可预测。

一个逻辑工作单元要称为事务,必须满足ACID(原子性,一致性,隔离性和持久性):http://baike.baidu.com/view/600227.htm

事物的ACID特性:

满足ACID特性的操作,我们可以说它是一个事物。

  1. 原子性:该操作是最小逻辑单元整体,已经不可分隔。
  2. 一致性:要么所有都执行,要么所有都不执行。
  3. 隔离性:多个事务相互隔离,互不影响。
  4. 持久性:事物的执行结果永久生效。

事务的结束只能有两种形式:提交和回滚。操作完全成功则提交,产生永久性的修改;操作不完全成功则回滚,恢复到事务开始前的状态。它们将结束一个事务。

具体的JDBC编程中事务的应用步骤如下:

    1) JDBC对事务的管理交由Connection,都是由Connection的对象方法实现的;

    2) 首先关闭自动提交,开启事务:void Connection.setAutoCommit(false);  // false表示关闭自动提交

    3) 然后就是事务中包含的一系列SQL语句

    4) 提交事务:con.commit();  // 显式提交

    5) 回滚:如果在事务执行过程中出错(用try-catch语句捕捉),则在错误处理语句中显式回滚:con.rollback();

    6) 中间点:一般的事务回滚是回滚到事务开始之前,但是也可以只回滚到事务中的某个中间点。

    设置中间点

         i. Savepoint Connection.setSavepoint();  // 在事务的某个位置设置一个中间点,该中间点没有命名,使用系统默认的命名

         ii. Savepoint setSavepoint(String name);  // 给中间点命名

         iii. 回滚到指定的中间点:connection.rollback(Savepoint savepoint);  // 回滚到指定的中间点


在JDBC中可以调用Connection对象的setAutoCommit(false)这个接口,将commit()之前的所有操作都看成是一个事物。同时,如果事务执行过程中发生异常,可以调用rollback()接口进行回滚到事务开始之前的状态。

 JDBC的事务处理



(1)关闭自动提交事务。通过设置连接的自动提交事务属性为false,如下:

Connection
conn = DriverManager.getConnection(
"连接URL","用户名","密码");
//关闭自动提交事务conn.setAutoCommit(false);

(2)如果执行顺利,提交事务;一旦发生异常,回滚(rollback)事务,如下:

try{    conn.setAutoCommit(false);    //关闭自动提交事务    stmt = conn.createStatement();    //创建会话    stmt.executeUpdate("sql语句");    conn.commit();     //提交事务}catch(Exception e){    e.printStackTrace();    conn.rollback();   //回滚事务   }

  

(3)关闭连接,如下:

finally{    if(stmt != null)        stmt.close();    if(conn != null)        conn.close();}