try{
 ....
 s.commit();
}
catch(exception e)
{
 s.rollback();
}
是这样吗?

解决方案 »

  1.   

    conn.setAutoCommit(false);
           smt=conn.createStatement();
           try{
             ret=smt.executeUpdate(sb.toString());
             if( ret <= 0 ){
               conn.rollback();
               return ret;
             }
            }catch(Exception e){
              conn.rollback();
    是这样的,应该是差不多啊。
              throw new Exception("更新任务表时出现错误:"+e);
            }
      

  2.   

    conn.setAutoCommit(false);
           smt=conn.createStatement();
           try{
             ret=smt.executeUpdate(sb.toString());
             conn.commit();//少了这句,所有数据操作完后再提交(commit),你没commit
             if( ret <= 0 ){
               conn.rollback();
               return ret;
             }
            }catch(Exception e){
              conn.rollback();
    是这样的,应该是差不多啊。
              throw new Exception("更新任务表时出现错误:"+e);
            }
      

  3.   

    ★ 在jdbc中,事务操作缺省是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作,操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回滚。
    ★ 在jdbc中,可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()来进行整体提交,倘若其中一个表达式操作失败,都不会执行到commit(),并且将产生响应的异常;此时就可以在异常捕获时调用rollback()进行回滚。这样做可以保持多次更新操作后,相关数据的一致性,示例如下:    try {conn = DriverManager.getConnection    ("jdbc:oracle:thin:@host:1521:SID","username","userpwd";       conn.setAutoCommit(false);//禁止自动提交,设置回滚点       stmt = conn.createStatement();stmt.executeUpdate(“alter table …”); //数据库更新操作1stmt.executeUpdate(“insert into table …”); //数据库更新操作2       conn.commit(); //事务提交     }catch(Exception ex) {             ex.printStackTrace();         try {          conn.rollback(); //操作不成功则回滚          }catch(Exception e) {e.printStackTrace();           }}