当多个用户访问相同的数据时,可能会出现3种问题:
为了解决这些由于多个用户请求相同数据而引起的问题,事务之间必须用锁相互隔开。多数主流的数据库支持不同类型的锁;因此,JDBC API支持不同类型的事务,它们由 Connection对象的setTransactionLevel方法指定。在JDBC API中可以获得下列事务级别:
运行在TRANSACTION_SERIALIZABLE模式下的事务可以保证最高程度的数据完整性,但事务保护的级别越高,性能损失就越大。
假设我们现在有一个Connection对象con,那么设置事务级别的方法如下:
con.setTransactionLevel(TRANSACTION_SERIALIZABLE) ;
你也可以使用getTransactionLevel()方法来获取当前事务的级别:
con.getTransactionLevel();
在默认情况下,JDBC驱动程序运行在"自动提交"模式下,即发送到数据库的所有命令运行在它们自己的事务中。这样做虽然方便,但付出的代价是程序运行时的开销比较大。我们可以利用批处理操作减小这种开销,因为在一次批处理操作中可以执行多个数据库更新操作。但批处理操作要求事务不能处于自动提交模式下。为此,我们首先要禁用自动提交模式:
con.setAutoCommit(false);
下面是一个批处理操作的例子:
|
executeBatch()方法返回一个更新计数的数组,每个值对应于批处理操作中的一个命令。批处理操作可能会抛出一个类型为BatchUpdateException的异常,这个异常表明批处理操作中至少有一条命令失败了。(T111)
本文选自飞思图书《精通Java核心技术》