public class DBManager {
private Logger log = Logger.getRootLogger();
private Connection conn = null;
private Statement stmt = null;
  public void connect() throws Exception {
SysInfo sysInfo = SysInfoFactory.getInstance();

if (sysInfo.getDbConnection().equals("datasource")) {
conn =
DBConnectionPool.getDataSource().getConnection(
sysInfo.getDbusername(),
sysInfo.getDbpassword());

} else {
Class.forName(sysInfo.getDbdriver());
conn = DriverManager.getConnection(sysInfo.getDburl());
conn.setAutoCommit(false);
}
stmt = conn.createStatement();
} public void commit() throws Exception {
if ((conn != null) && (conn.getAutoCommit() == false)) {
conn.commit();
}
}
public void rollback() throws Exception {
if ((conn != null) && (conn.getAutoCommit() == false)) {
conn.rollback();
}
}
public ResultSet exeQuery(String sql) throws Exception {
log.debug(sql);
ResultSet rset = null;
rset = stmt.executeQuery(sql);
return rset;
}
public boolean exeInsert(String sql) throws Exception {
log.debug(sql);
boolean result = stmt.execute(sql);
return result;
}
public boolean exeDelete(String sql) throws Exception {
log.debug(sql);
boolean result = stmt.execute(sql);
return result;
} public int exeUpdate(String sql) throws Exception {
log.debug(sql);
int result = 0;
result = stmt.executeUpdate(sql);
return result;
} public void close() {
try {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
log.error(e.getMessage().toString());
}
}
}
上面这个类提供了数据库操作
但是当我想进行批量更新数据时,如果其中任一条更新发生异常那么就不进行提交。我可以调用这个类的rollback() 方法,没有异常调用commit() 方法,  请问怎么开始事务?
这样 conn.setAutoCommit(false);是不是就是自动开始事务了呢?
谢谢各位朋友

解决方案 »

  1.   

    如果conn.setAutoCommit(false);那么别忘了完成后要自己提交.conn.commit();connection默认自动提交,会保证在同一个statement中实现事务完整性,一般不需要自己控制。
      

  2.   

    首先
          conn.setAutoCommit(false);
    执行成功后
          conn.commit();
          conn.setAutoCommit(true);
    若有异常,在catch块中
          conn.rollback();
      

  3.   

    根据楼主的代码:
    DBManager dbManager=new DBManager();
    dbManager.connect();
    ResultSet rs=null;
    try
    {
    rs=dbManager.exeQuery(sql);
    dbManager.commit();
    }catch(Exception e)
    {
     dbManager.rollback();
    }
    finally
    {
      if(rs!=null)try{rs.close();}catch(Exception ee){}
      dbManager.close();
    }
      

  4.   

    楼主的代码没错,但是commit之后要setAutoCommit(true);