在dao中开始事物
try
调用存储过程A
调用存储过程B
设置状态信息
没有错误就commit
catch
rollback为何设置状态出错或执行B出错误,执行rollback了而过程A执行的操作没有回滚呢?? 各位大虾帮帮忙!

解决方案 »

  1.   

    public int GetInt(){
    int n=0;
    int f=5;
    try {
    conn.setAutoCommit(false);
    String sql2="delete from student where classid=?";
    pstm=conn.prepareStatement(sql2);
    pstm.setInt(1, 1);
    pstm.executeUpdate();


    String sql1="delete from class where classid=?";
    pstm=conn.prepareStatement(sql1);
    pstm.setInt(1, 1);

    n=pstm.executeUpdate();

    conn.commit();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    try {
    conn.rollback();
    } catch (SQLException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    System.out.println("请删除班级下相关学生");
    }

    return n;

    }
      

  2.   

    我遇到了类似的问题   这是我的帖   http://topic.csdn.net/u/20080624/18/fa0ebf84-b9bf-457d-a6ca-923670c3b689.html还没找到原因如果你找到了记得告诉我啊
      

  3.   

    奇怪了,我的持久化层由两部分组成类Impl 负责事物控制调用DAO层 负责具体的insert、update、delele、select等我在Impl中开启事物,然后如果在dao中设置autocommit为false的话,当出现异常事物rollback的时候,表竟然被锁住了,看来是不可以设置autocommit的
      

  4.   

    MYISAM不支持transaction需要INNODB但是不影响写的代码
      

  5.   

    utx = commsoft.common.ServiceLocator.getInstance().
    getUserTransaction();
    if (utx.getStatus() ==
    javax.transaction.Status.STATUS_NO_TRANSACTION) {
    utx.begin();
    } else {
    utx = null;
    }if (utx != null) {
    utx.commit();
    }
    }catch (Exception e) {
    if (utx != null) {
    try {
    utx.rollback();
    } catch (Exception epx) {
    System.out.println("事务回滚错误:" + epx.toString());
    }
    }
    sysCommethod.Exception("添加数据错误:", form.getDsName(), e, servlet);
      

  6.   

    javax.transaction.UserTransaction为何不用这个