关于事务处理(在线等待)

xinshou1979330 2005-11-09 11:57:36
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);是不是就是自动开始事务了呢?
谢谢各位朋友


...全文
145 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jFresH_MaN 2005-11-09
  • 打赏
  • 举报
回复
楼主的代码没错,但是commit之后要setAutoCommit(true);
liu_you 2005-11-09
  • 打赏
  • 举报
回复
根据楼主的代码:
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();
}
clearwater21cn 2005-11-09
  • 打赏
  • 举报
回复
首先
conn.setAutoCommit(false);
执行成功后
conn.commit();
conn.setAutoCommit(true);
若有异常,在catch块中
conn.rollback();
pdvv 2005-11-09
  • 打赏
  • 举报
回复
如果conn.setAutoCommit(false);那么别忘了完成后要自己提交.conn.commit();

connection默认自动提交,会保证在同一个statement中实现事务完整性,一般不需要自己控制。

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧