问题如题
我先查了一下提交和回滚的原理,都是要建立空间存放新数据、编写logo日志、记录操作内容、获取锁,提交时则更新日志,完成剩下的工作和释放锁,回滚则读取操作内容并进行大量io,最后也释放锁
那么当我们用jdbc的connection或是hibernate操作数据库时异常发生在commit()时,需不需要再进行rollback??
---------------------------------
今天检查时忽然发现有执行正常提交出错的现象,原因是修改某条数据时插入了datetime类型字段不兼容的字符串,本以为前面操作肯定会为此类错误抛出异常。原先的设计是判断操作时是否出异常,之后直接选择是提交还是回滚,且提交失败后无rollback措施。

解决方案 »

  1.   

    不同数据库有不同操作。你在执行sql语句时可以包装成事务。
      

  2.   

    “需不需要再进行rollback”?
    看楼主什么事务啊
    一般来说在异常里捕获
      

  3.   

    当然是数据库事务咯
    目前我用的hibernate,数据库时mysql,但是我想知道所有技术(无论是jdbc还是hibernate还是其他什么的),无论什么数据库,到底需不需要在commit出错时再rollback
      

  4.   

    一般数据库出错了 最好都进行回滚操作 因为很可能改变数据库的数据 造成数据错误 jdbc和hibernate都可以进行手动的事务提交和回滚(放在try catch 和finally里)但有些框架对事务提交回滚等进行了封装 可以不手动的事务提交和回滚
      

  5.   

    一般数据库出错了 最好都进行回滚操作 因为很可能改变数据库的数据 造成数据错误 jdbc和hibernate都可以进行手动的事务提交和回滚(放在try catch 和finally里)但有些框架对事务提交回滚等进行了封装 可以不手动的事务提交和回滚
      

  6.   

    一般数据库出错了 最好都进行回滚操作 因为很可能改变数据库的数据 造成数据错误 jdbc和hibernate都可以进行手动的事务提交和回滚(放在try catch 和finally里)但有些框架对事务提交回滚等进行了封装 可以不手动的事务提交和回滚
      

  7.   

    hibernate配置了事务的话。不需要手动rollback。hibernate会自己判断的
      

  8.   

    spring 不用
    没有用spring 需要捕捉异常,然后rollback
      

  9.   

    再确认一次。
    jdbc--commit出exception后需要rollback??
    hibernate--commit出exception后需要rollback??
    spring(ssh)--commit出exception后不需要rollback??
      

  10.   

    jdbc 需要
    hibernate 需要
    SSH 不需要
      

  11.   

    好的,先结了吧,谢谢大家。
    这类问题我忽然想到,去看看hibernate的文档似乎是更好的找到答案的办法。