回滚可以写在存储过程里面,再oracle中的存储过程可以捕获异常,执行回滚,mysql的每做过,应该也可以,你试试吧!

解决方案 »

  1.   

    MySQL现在的版本不支持存储过程,可以用InnoDB的表类型支持事务。如果上述执行的事务其中某一个增加操作出错都会导致回滚!
      

  2.   

    用两个线程来实现
    start启动第一个线程
    stop启动线程2,获得线程1的connection,停止线程1,connection回滚
      

  3.   

    注明:线程1运行存储过程,在存储过程外,即java代码里控制事物
      

  4.   

    是啊,你做一个判断,当事务不成功,你就执行rollback就好了~~
      

  5.   

    Oracle存储过程是可以返回数据给调用的Java程序的,MSSql没有试过。
      

  6.   

    将操作调成不是自动提交不就可以了吗!cancle里边写一个Rolback
      

  7.   

    新版本的Mysql支持事务1、我如何得到该事务是否执行完毕的状态
    答:你在存储过程中事务执行完毕,返回一个状态值,如果页面中能接收到这个值,表示事务执行完毕。2、如何停止正在进行的事务。
    答:这个比较痛苦,你在点击开始执行事务的时候取得存储过程的spid,然后点击停止的时候查询取得这个spid,然后把这个存储过程停止,这样就可以保证数据的同步了。说起来比较简单,但写程序比较痛苦3、如果事务可以停止,那么我又如何回滚我的事务呢?
    答:事务会自动回滚,不需要你人工干涉
      

  8.   

    to hymarx(hi马克思/偷偷给我一点爱千万别给我分) 作为浏览器是无状态的,在调用存储过程后,接下来有sql自己完成(使用你传进的参数),sql是否成功不会返回给调用着信息(jsp程序不会等几万条数据插入后在进行吧?),conection连接马上关闭,你的事务也跟着消失了。
    当点击“stop”时原来的connnection已经不存在了,更找不到事务了。我是这样理解的
    ??
      

  9.   

    兄弟不会啊,浏览器是没有状态的没错啊,不过发过去的请求可以修改服务器端的状态啊
    存储过程是由sql自己完成没错,可是你是在外面commit啊,只要没有到commit就相当于没运行啊
    原来的connection一直存在只要没有关掉都可以获得,可以在调用线程之前保存下来(可以通过static对象来保存),等接受到stop请求后就可以获得这个connection
      

  10.   

    可以注册啊,写到一个hash里,把key传到浏览器啊,然后自己只用自己的啊
      

  11.   

    to  hymarx(hi马克思/偷偷给我一点爱千万别给我分) 
    能不能具体点
      

  12.   

    在服务器端做一个hashtable或者hashmap,用来记录每个客户端的connection
    没发上来一个请求,就把connection写到该hashtable里,key随即产生或者有规律产生,把key通过jsp传到浏览器
    浏览器stop 的时候,就把该key再发回来,服务端根据该key获得自己的connection,然后进行回滚操作
    当一个connection不再用了,就把他从hash里清除