这个东西很难说
看不到你的callin.InsertCallinUnit()具体实现还有,你是用什么数据呀?有些数据库不支持事务的

解决方案 »

  1.   

    我用了一个javabean来放数据库的连接及增、删、改等操作,每次调用callin.InsertCallinUnit()只进行一条数据的录入。conn是javabean中的公用连接的返回值。数据库是oracle,肯定支持事务了。
      

  2.   

    for(int t=1;t<input_visited_unitNum+1;t++)
    { //for1 begin

    if(unit_id_notnull)//if3 begin
    {
      
        if(!callin.InsertCallinUnit(callin_id_sq,unit_id,cus_price,callin_unit_notes))//逐条录入数据,失败则设布尔值为true,并退出循环,数据回滚。
    {detail_insert_failure=true;break;}           
    } //if3 end }//for1 end------->for(int t=1;t<input_visited_unitNum+1;t++)
    { //for1 begin
      
        if(unit_id_notnull&&!callin.InsertCallinUnit(callin_id_sq,unit_id,cus_price,callin_unit_notes))//逐条录入数据,失败则设布尔值为true,并退出循环,数据回滚。
    {detail_insert_failure=true;
              break;}           
    }//for1 end
      

  3.   

    zxhong(红透半边天):你的写法和我的是一个意思,为什么要这样改呢?
      

  4.   

    这样写比较简洁吗!!!
    而且我怀疑2个if,break又没指出跳转到那,可能会出问题!
    你可以试试如果不行说明
    unit_id_notnull&&!callin.InsertCallinUnit(callin_id_sq,unit_id,cus_price,callin_unit_notes)
    一直为false那就要检查其它部分代码了!
      

  5.   

    zxhong(红透半边天):按你说的改,一样的错误。出错之前的记录进了数据库,说明这里写的事务代码不起作用,我想知道为什么会不起作用??
      

  6.   

    因为detail_insert_failure一直是false
    也就是说条件unit_id_notnull&&!callin.InsertCallinUnit(callin_id_sq,unit_id,cus_price,callin_unit_notes)
    一直为false
      

  7.   

    但是我有出现异常回滚的语句,
    }catch(SQLException e){
              conn.rollback();//异常回滚
    //System.err.println("executeInsert error:"+e.getMessage());
               out.println("my exception");
    }finally{
               conn.setAutoCommit(true);
    }//end finally
    即使detail_insert_failure一直为false,出错以后catch也应该捕捉这个错误从而触发回滚动作,否则要try...catch()干什么用? zxhong(红透半边天) ,谢谢你一直跟贴!!
      

  8.   

    问题是detail_insert_failure一直是false
    并没有意外产生啊
    所以根本catch不到
      

  9.   

    callin.InsertCallinUnit()
    可能是你这个方法的异常并没有抛出来,而是被你在里面给处理掉了你这个方法的异常处理给我看看
      

  10.   

    1.你的事务回滚标记应该默认为true,只有不出现错误才提交.这样可以保证你中间的操作出现错误的时候不会误提交事务.
    2.去掉中间的bean调用写入数据,直接写入数据库,看能否回滚.一次一次排除错误.
    3.单独检查中间的bean调用.