JDBC对数据库的事务操作
ginkou.fly 2002-9-4
1. 概述:
在jdbc的数据库操作中,一项事务是由一条或是多条表达式所组成的一个不可分割的工作单元。我们通过提交commit()或是回滚rollback()来结束事务的操作。关于事务操作的方法都位于接口java.sql.Connection中。
2. 特点:
★ 在jdbc中,事务操作缺省是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作,操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回滚。
★ 在jdbc中,可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()来进行整体提交,倘若其中一个表达式操作失败,都不会执行到commit(),并且将产生响应的异常;此时就可以在异常捕获时调用rollback()进行回滚。这样做可以保持多次更新操作后,相关数据的一致性,示例如下:
try {
conn =
DriverManager.getConnection
("jdbc:oracle:thin:@host:1521:SID","username","userpwd";
conn.setAutoCommit(false);//禁止自动提交,设置回滚点
stmt = conn.createStatement();
stmt.executeUpdate(“alter table …”); //数据库更新操作1
stmt.executeUpdate(“insert into table …”); //数据库更新操作2
conn.commit(); //事务提交
}catch(Exception ex) {
ex.printStackTrace();
try {
conn.rollback(); //操作不成功则回滚
}catch(Exception e) {
e.printStackTrace();
}
}
★ jdbc API支持事务对数据库的加锁,并且提供了5种操作支持,2种加锁密度。
5种支持:
static int TRANSACTION_NONE = 0;
→禁止事务操作和加锁。
static int TRANSACTION_READ_UNCOMMITTED = 1;
→允许脏数据读写(dirty reads)、重复读写(repeatable reads)和影象读写(phntom
reads)
static int TRANSACTION_READ_COMMITTED = 2;
→禁止脏数据读写(dirty reads),允许重复读写(repeatable reads)和影象读写(phntom reads)
static int TRANSACTION_REPEATABLE_READ = 4;
→禁止脏数据读写(dirty reads)和重复读写(repeatable reads),允许影象读写(phntom reads)
static int TRANSACTION_SERIALIZABLE = 8;
→禁止脏数据读写(dirty reads)、重复读写(repeatable reads)和允许影象读写(phntom reads)
2种密度:
最后一项为表加锁,其余3~4项为行加锁。
脏数据读写(dirty reads):当一个事务修改了某一数据行的值而未提交时,另一事务读取了此行值。倘若前一事务发生了回滚,则后一事务将得到一个无效的值(脏数据)。 上一页 下一页






