JDBC中的事务处理
在JDBC的数据库操作中,一项事务是由一条或是多条表达式所组成的一个不可分割的工作单元。我们通过提交commit()或是回退rollback()来结束事务的操作。关于事务操作的方法都位于接口java.sql.Connection中。
首先我们要注意,在JDBC中,事务操作默认是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作。操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回退。
其次,在JDBC中,可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()来进行整体提交。倘若其中一个表达式操作失败,都不会执行到commit(),并且将产生响应的异常。此时就可以在异常捕获时调用rollback()进行回退。这样做可以保持多次更新操作后,相关数据的一致性。
具体事例如下:
try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:luecc", "scott", "tiger"); //点禁止自动提交,设置回退 conn.setAutoCommit(false); stmt = conn.createStatement(); //数据更新 stmt.addBatch("insert into dept values (51, '500', 'ccc')"); stmt.addBatch("insert into dept values (52, '600', 'ddd')"); stmt.addBatch("insert into dept values (53, '700', 'eee')"); stmt.executeBatch(); //事务提交 conn.commit(); conn.setAutoCommit(true); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch(SQLException e) { e.printStackTrace(); try { if(conn != null) { //操作不成功则回退 conn.rollback(); //重新设置恢复默认值 conn.setAutoCommit(true); } } catch (SQLException e1) { e1.printStackTrace(); } }
这样上面这段程序的执行,或者两个操作都成功,或者两个都不成功,读者可以自己修改第二个操作,使其失败,以此来检查事务处理的效果。