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);是不是就是自动开始事务了呢?
谢谢各位朋友
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);是不是就是自动开始事务了呢?
谢谢各位朋友
conn.setAutoCommit(false);
执行成功后
conn.commit();
conn.setAutoCommit(true);
若有异常,在catch块中
conn.rollback();
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();
}