jdbc setAutoCommit无效

qiaogr138138 2012-11-26 05:34:43
//事务,批量执行sql
public void executeMulSql(List<String> sqls) {
Connection conn = getConnection();

Statement stmt = null;
try {
// 取消自动提交
conn.setAutoCommit(false);
stmt = conn.createStatement();
for (int n = 0; n < sqls.size(); n++) {
System.out.println(sqls.get(n));
stmt.addBatch(sqls.get(n));
}
stmt.executeBatch();

conn.commit();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {

try {
// 清除批处理参数
stmt.clearBatch();
conn.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
}

}

//当执行到stmt.executeBatch();时,去数据库看了看数据还是进去了,并且在rollback的时候的没有效果。大侠帮忙。。
...全文
402 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
suciver 2012-11-28
  • 打赏
  • 举报
回复
引用 10 楼 qiaogr138138 的回复:
数据库是oracle,异常时表名或视图已经存在,我同时新建两张一样的表,批量执行,一个建成了,一个失败了。按理说应该都失败的。。。
你的sql是建表操作?如果是的话这种操作数据库是不会回滚的
suciver 2012-11-27
  • 打赏
  • 举报
回复
你这段代码是在异常后才rollback的如果执行都没问题自然不会回滚
qiaogr138138 2012-11-27
  • 打赏
  • 举报
回复
conn对象是java 自身的类对象,获取是封装过的,难道是封装过的问题。。。,用的数据库是oracle。
qiaogr138138 2012-11-27
  • 打赏
  • 举报
回复
数据库是oracle,异常时表名或视图已经存在,我同时新建两张一样的表,批量执行,一个建成了,一个失败了。按理说应该都失败的。。。
笑莫问 2012-11-27
  • 打赏
  • 举报
回复
引用 6 楼 qiaogr138138 的回复:
报了异常了,我特意测得。
建议把异常也贴出来。
jackson_fighting 2012-11-27
  • 打赏
  • 举报
回复
引用 3 楼 ticmy 的回复:
不会是mysql数据库吧,mysql的MyISAM之类的引擎是不支持事务的,InnoDB支持事务
++
alison007 2012-11-27
  • 打赏
  • 举报
回复
首先你要清楚你用的数据库是否支持事务,如mysql的MyISAM就不支持事务的,那无论setAutoCommit(ture),它都是会立即提交的
qiaogr138138 2012-11-27
  • 打赏
  • 举报
回复
报了异常了,我特意测得。
龙四 2012-11-26
  • 打赏
  • 举报
回复
不会是mysql数据库吧,mysql的MyISAM之类的引擎是不支持事务的,InnoDB支持事务
Fly_m 2012-11-26
  • 打赏
  • 举报
回复
Connection conn = getConnection(); 这个conn是如何获取的呢? 就是普通的conn,还是封装过?
zxhcloth 2012-11-26
  • 打赏
  • 举报
回复
从代码上看没什么问题。

81,094

社区成员

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

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