我抄官方的例子,
try{
   ....
}
catch (sqlexception e){
   connection.rollback()
}   但编译不通过,说connection.rollback()抛出的异常应被被捕获.搞得我只好try{
   ....
}
catch (sqlexception e)[
   try{
       connection.rollback()
   }
   catch....
}   

解决方案 »

  1.   

    官方的例子有可能只抄了其中一段。其实它在外面捕获了。比如
    public static.... aa(){
        try{
           con.rollback()
       }catch(Exception e){
       。
    }
    }
      

  2.   

    抛出SQLException,而它是一种checked exception,所以必须显示地捕获处理。
      

  3.   

    没错误怎么要rollback呢?
    那当然是出异常
    才来roll
    捕获异常就是try catch
    所以得
      

  4.   

    rollback需要捕获异常的原因,是因为只有当你在一个Transaction中的相关操作,如果有一步出现异常则发生回滚。但回滚是要有一些条件的,第一你这个Transaction必须是同一个,还有你的Connection不能关闭,如果在执行代码的时候发生了致命性错误,导致Connection意外关闭了,则这个Transaction是不能正确回滚的。当这些条件满足时才能进行回滚,所以rollback要加try{} catch(){}以保证如果出现意外情况事物不能回滚时的操作。