这个我是这样理解的,你把setAutoCommit(flase)后,就等于不自动存盘(提交)了。所以你做的非法操作是没有提交的,就是没去数据库。除非你用commit()提交。rollback()是恢复到上一次commit()的状态。有点象你改了一个文件,没存盘,rollback呢就象你关闭这个文件,程序问你要存盘吗?你不要。而没有rollback呢等于强行关机。这个对于你的效果可能是一样的,但实际上的机制是不一样的。
    你可以这么想一下,如果很多客户端都访问同一内存区的结果集。因为你没有rollback,别人可能访问到破坏了原子性的数据。

解决方案 »

  1.   

    当你的在try中执行错误时,它就直接跳入catch执行了,所以try中后面的commit方法没有执行,也就是说你的数据不会写到数据表中。你在catch中加上rollback,它会执行这个命令进行rollback,如果你不加上这个命令,相当于你没有释放资源,但数据库在某个时候会自动取消这次事务的.所以表面上看,效果一样。要养成良好的编程习惯。
      

  2.   

    当你在一个事务中进行两次数据库的操作的时候,第一次成功,第二次失败,那么rollback很重要。
      

  3.   

    楼上说的很多,你根本没有执行commit()方法。
    但是rollback()不能省略,否则数据库以为你还没有结束
    会一直等待你提交或者滚回,浪费资源,如果有超时机制的
    过一定时间会取消,否则一直在