我的connection.rollback()为什么必须用try..catch

sdyqingdao 2009-12-14 12:25:57
我抄官方的例子,
try{
....
}
catch (sqlexception e){
connection.rollback()
}

但编译不通过,说connection.rollback()抛出的异常应被被捕获.搞得我只好

try{
....
}
catch (sqlexception e)[
try{
connection.rollback()
}
catch....
}
...全文
285 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
crazylaa 2009-12-14
对头,底层抛出的异常你必须捕获,必须这样,没的道理可言。
一定要道理,那只能说“玩啥,就得尊重啥玩意儿的规则”。
  • 打赏
  • 举报
回复
iamrf 2009-12-14
rollback需要捕获异常的原因,是因为只有当你在一个Transaction中的相关操作,如果有一步出现异常则发生回滚。但回滚是要有一些条件的,第一你这个Transaction必须是同一个,还有你的Connection不能关闭,如果在执行代码的时候发生了致命性错误,导致Connection意外关闭了,则这个Transaction是不能正确回滚的。当这些条件满足时才能进行回滚,所以rollback要加try{} catch(){}以保证如果出现意外情况事物不能回滚时的操作。
  • 打赏
  • 举报
回复
sean1203 2009-12-14
没错误怎么要rollback呢?
那当然是出异常
才来roll
捕获异常就是try catch
所以得
  • 打赏
  • 举报
回复
justinavril 2009-12-14
抛出SQLException,而它是一种checked exception,所以必须显示地捕获处理。
  • 打赏
  • 举报
回复
苍蝇①号 2009-12-14
自己补上就行了,可能是官网的疏忽也可能是你看的失误,总之能把问题搞定才是我们需要的
  • 打赏
  • 举报
回复
yetaodiao 2009-12-14
官方的代码楼主没看全
  • 打赏
  • 举报
回复
crazylaa 2009-12-14
官方的例子有可能只抄了其中一段。其实它在外面捕获了。比如
public static.... aa(){
try{
con.rollback()
}catch(Exception e){
。。。。
}
}
  • 打赏
  • 举报
回复
sdyqingdao 2009-12-14
为什么官方的例子不捕获呢?

[Quote=引用 1 楼 crazylaa 的回复:]
对头,底层抛出的异常你必须捕获,必须这样,没的道理可言。
一定要道理,那只能说“玩啥,就得尊重啥玩意儿的规则”。
[/Quote]
  • 打赏
  • 举报
回复
相关推荐
发帖
Java SE

6.2w+

社区成员

Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
帖子事件
创建了帖子
2009-12-14 12:25
社区公告
暂无公告