`

java 事物处理

阅读更多
public boolean deleteSchedule(int number, String courseNum) throws SQLException {
   // TODO Auto-generated method stub
   boolean flag =false;
   String sql1 = "delete from SC WHERE CNumber=? and CourseNum=?";
   String sql2 ="delete from Schedule WHERE CNumber=? and CourseNum=?";
   try {
    DataBaseConnection dbc = new DataBaseConnection();
      con = dbc.getConnection();
    //preStm=con.prepareStatement(sql1).addBatch(sql2);
     con.setAutoCommit(false);// 更改JDBC事务的默认提交方式
     preStm=con.prepareStatement(sql1);
     preStm.setInt(1, number);
     preStm.setString(2, courseNum);
     preStm.execute();
     preStm=con.prepareStatement(sql2);
     preStm.setInt(1, number);
     preStm.setString(2, courseNum);
     preStm.execute();
     con.commit();//提交JDBC事务
     con.setAutoCommit(true);// 恢复JDBC事务的默认提交方式
     flag =true;
   } catch (SQLException e) {
     con.rollback();//回滚JDBC事务
         try {
     DAOFactory.getCheckStringImpl().CheckString("ManageScheduleImpl.java", e);
    } catch (Exception e1) {
     // TODO Auto-generated catch block
     e1.printStackTrace();
    }
    System.out.println("ddddddddddd"+e);
    flag=false;
   }finally{
      this.close();
   }
   return flag;
}

@Override
public boolean insertSchedule(ScheduleVo course) {
   // TODO Auto-generated method stub
   return false;
}

出现

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.解决办法

错误情况:

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.

错误原因:

1.         当你在一个SQL SERVER的JDBC连接上执行多个STATEMENTS的操作。

2.         手动事务状态(AutoCommit=false),并且使用 direct (SelectMethod=direct) 模式。

解决方法:

1.         确保在你的连接上只有一个STATEMENT操作。

2.         使用手动事务模式时,必须在连接字符串中加上SelectMethod=Cursor。例如:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=RMS_Pro;SelectMethod=Cursor;User=sa;Password= ");

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics