如果一个事务执行到一半断电了

gaia_next 2011-11-30 08:54:58
这里是我执行事务的方法
public static boolean executeTransaction(String[] sqlArray) {
Connection conn = null;
Statement stmt = null;
boolean flag = false;
try {
conn = DBUtil.getInstance().getConn();
conn.setAutoCommit(false);
stmt = conn.createStatement();
for (String str : sqlArray) {
stmt.addBatch(str);
}
stmt.executeBatch();
flag = true;
conn.commit();
} catch (Exception e) {
e.printStackTrace();
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
} finally {
DBUtil.tryClose(null, stmt, conn);
}
return flag;
}
如果在执行stmt.executeBatch();到一半的时候突然发生断电之类的意外情况,那我的事务会不会回滚,还是说数组前几条SQL语句会执行。求解释。。。
...全文
1655 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lliiqiang 2012-03-13
  • 打赏
  • 举报
回复
会回滚
xhfqlong 2011-11-30
  • 打赏
  • 举报
回复
你可以把数据写成批量处理,只要数据没有全部写到数据库就不要COMMIT。
lliiqiang 2011-11-30
  • 打赏
  • 举报
回复
会自动回滚,只不过多余的信息可能会没有被删除,导致浪费了很多资源
薛定谔之死猫 2011-11-30
  • 打赏
  • 举报
回复 1
这是dbms的责任,这种状况下重新启动数据库服务器会使用redo日志使数据库恢复断电前的状态,然后未commit的事务执行undo~
xiaozhuangfeng 2011-11-30
  • 打赏
  • 举报
回复
肯定会的,你看看事务的定义
wang7535067 2011-11-30
  • 打赏
  • 举报
回复
会回滚的,
LucEaspe 2011-11-30
  • 打赏
  • 举报
回复
没有commit 肯定会回滚。
quhuafeng521 2011-11-30
  • 打赏
  • 举报
回复
没有进行commit,之前的一切DML应该都会回滚的。
态度决定品质 2011-11-30
  • 打赏
  • 举报
回复
分两种情况吧:
1、数据库服务器掉电了,数据库日志回记录状态,恢复时回滚(和数据库设置有关系)
2、数据库服务器没掉电,只是应用服务器掉电,不影响。(指令已经发送到数据库服务器了)
游一游走一走 2011-11-30
  • 打赏
  • 举报
回复
会,这个是肯定的
你完全可以模拟这种场景的
断点设置在flag = true;,执行到断点是强制关闭程序,看下效果就知道了

62,614

社区成员

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

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