dcp*_*dcp 17 java connection jdbc rollback
根据JAVA文档,Connection#commit()可以抛出SQLException.我的问题是在这种情况下是否仍应发布回滚.
例如:
Connection con = null;
try {
// assume this method returns an opened connection with setAutoCommit(false)
con = createConnection();
// do DB stuff
con.commit();
} catch (SQLException e) {
if (con != null) {
// what if con.commit() failed, is this still necessary,
// will it hurt anything?
con.rollback();
}
} finally {
if (con != null) {
con.close();
}
}
Run Code Online (Sandbox Code Playgroud)
我实际上将con.rollback()调用包装到另一个方法中,该方法忽略了它抛出的任何异常,所以我想我在这里没问题.我只是想知道这是否是处理事情的最佳方式.
Mos*_*sha 19
根据Java 1.6 JDBC文档,即使提交失败,回滚也很重要:
强烈建议应用程序在调用close方法之前显式提交或回滚活动事务.如果调用close方法并且存在活动事务,则结果是实现定义的.
这意味着如果您没有显式调用回滚,则某些JDBC实现可能会在关闭连接之前调用commit.
回滚的另一个好理由是Xepoch建议,当使用连接池时,它更为重要.从连接池获取连接时,大多数实现将connection.setAutoCommit(defaultAutoCommit)在为您提供连接之前执行,并且根据JavaDocs:
如果在事务期间调用此方法并更改自动提交模式,则提交事务
如果connection.rollback()抛出异常 - 那么它是一个棘手的...
我会为了清理目的而进行显式回滚.虽然db中的更改不会以任何方式保留,但显然让数据库知道你已经在这里完成了.就像您显式关闭连接的方式一样,无需等待垃圾收集的Connection对象.
显然,这不是技术性答案,我也有兴趣了解这样做是否有实际意义.
| 归档时间: |
|
| 查看次数: |
11613 次 |
| 最近记录: |