关于JDBC对事务的支持


在操作数据库的时候,应当尽可能的通过事务来完成。

举例来说:按照通常的模式,每当执行pstmt.executeUpdate()方法时,在数据库看来实际上是提交了一次事务。但往往在一个方法中会出现执行A、B、C等等多个pstmt.executeUpdate()操作,相当于分别执行A、B、C等等多个事务。这时如果中间出现问题,如A、B成功执行,C出现错误。那么在这次操作中就有可能出现数据库与实际情况不一致的问题。如果要回滚操作也只能回滚上一次出现问题的那个事务(如C),A和B的结果依然存进去了,这样是不对的。

JDBC引入事务后,可以在最后面一次提交,如其中某个pstmt.executeUpdate()方法执行时错误,则可以通过事务的回滚(rollback),撤销此次的所有操作(commit)。

关键代码片段:

[java]
try {
conn = DriverManager.getConnection(DBURL, DBUSER, DBPSW);
conn.setAutoCommit(false);// 禁用事务的自动提交,默认是true的。

// 以下可写多个pstmt
pstmt = conn.prepareStatement("XXX");
// …各种set…
pstmt.executeUpdate();

// 以下语句来提交事务
conn.commit();
} catch (Exception e) {
// TODO: handle exception
try {
if (conn != null) {
conn.rollback();// 执行回滚操作,取消上面所有的pstmt
}
} catch (Exception e2) {
// TODO: handle exception
}
}
[/java]

2 Responses Comment (2) Trackback (0)
  1. maple :

    现在大多用框架,这些都极少关心,各种被封装的东西~

  2. 藏章博客 :

    好久没来博主博客了,就来看看!~大家 相互访问

发表评论