社区
Java SE
帖子详情
设置connection.setAutoCommit(false)后,为什么不调用commit()也能提交?
hhx420
2007-06-10 11:15:55
各位:我想试验java数据库事务,在设置connection.setAutoCommit(false)后,为什么不调用commit()也能提交?并且在其中一个更新数据操作有异常时,rollback()也不起作用,我使用的是mysql数据库(5.x).
...全文
839
6
打赏
收藏
设置connection.setAutoCommit(false)后,为什么不调用commit()也能提交?
各位:我想试验java数据库事务,在设置connection.setAutoCommit(false)后,为什么不调用commit()也能提交?并且在其中一个更新数据操作有异常时,rollback()也不起作用,我使用的是mysql数据库(5.x).
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
eric06s
2007-06-20
打赏
举报
回复
public void setAutoCommit(boolean flag) {
try {
if (conn != null) {
conn.setAutoCommit(flag);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void commit() {
try {
if (conn != null) {
conn.commit();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
try{
// 批处理 start2
Connection conn = dbm.conn();
Statement stmt = conn.createStatement();
String getListSize = request.getParameter("listSize");
String[] id = request.getParameterValues("id");
String[] userName = request.getParameterValues("userName");
String[] passWord = request.getParameterValues("passWord");
int listSize = java.lang.Integer.parseInt(getListSize);
// 事务处理1
dbm.setAutoCommit(false);
// 事务处理1结束
for (int i = 0; i < listSize; i++) {
String sql = "UPDATE userInfo set userName='" + userName[i]
+ "',passWord='" + passWord[i] + "' where id='" + id[i]
+ "'";
stmt.addBatch(sql);
}
//执行并返回对数据库影响的行数
int[] counts=stmt.executeBatch();
// for (int i = 0; i < counts.length; i++) {
// System.out.println("counts[]=" + counts[i]);
// }
// 事务处理2
dbm.commit();
dbm.setAutoCommit(true);
// 事务处理2结束
// 批处理end2
}
joejoe1991
2007-06-20
打赏
举报
回复
我想问一下 事务是不是只针对那些修改语句说的啊?
一堆查询语句是不是不算说是事务?
kaoloveting
2007-06-20
打赏
举报
回复
mysql是不是那个版本一下的不支持事务?
fengmingjie
2007-06-20
打赏
举报
回复
dbm.commit();
dbm.setAutoCommit(true);
注释掉,看是否还能进行提交,把自动提交设置成false是不自动提交事务的
fiore
2007-06-10
打赏
举报
回复
没遇到过这个问题,贴出来看看
believefym
2007-06-10
打赏
举报
回复
没有commit也能提交,不可能吧
JDBC事务处理机制探秘
1、JavaBean中使用JDBC事务处理 在JDBC中怎样将多个SQL语句组合成一个事务呢?在JDBC中,打开一个连接对象
Connection
时,缺省是
auto
-
commit
模式,每个SQL语句都被当作一个事务,即每次执行一个语句,都会自动的得到事务确认。为了能将多个SQL语句组合成一个事务,要将
auto
-
commit
模式屏蔽掉。在
auto
-
commit
模式屏蔽掉之后,如果不
调用
commit
()方法,SQL语句不会得到JDBC事务处理确认。在最近一次
commit
()方法
调用
之后的所有SQL会在方法
commit
()
调用
时得到确认。 1. public int delete(int sID) { 2. dbc = new DataBase
Connection
(); 3.
Connection
con = dbc.get
Connection
(); 4. try { 5. con.
set
Auto
Commit
(
false
);// 更改JDBC事务的默认
提交
方式 6. dbc.executeUpdate("delete from bylaw where ID=" + sID); 7. dbc.executeUpdate("delete from bylaw _content where ID=" + sID); 8. dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID); 9. con.
commit
();//
提交
JDBC事务 10. con.
set
Auto
Commit
(true);// 恢复JDBC事务的默认
提交
方式 11. dbc.close(); 12. return 1; 13. } 14. catch (Exception exc) { 15. con.rollBack();//回滚JDBC事务 16. exc.printStackTrace(); 17. dbc.close(); 18. return -1; 19. } 20. } 2、SessionBean中的JTA事务 。 。 。 。 。 。 。 。 。
Connection
.
set
Auto
Commit
实践
connection
.
set
Auto
Commit
由于没有正确使用
Connection
.
set
Auto
Commit
(
false
)而导致SQL语句没有被
提交
症状:
提交
了Form,执行insert操作,经过Debug也确认PreparedStatement.executeUpdate()返回值>0,但是在MySQL中直接查询表,返回的仍然是Empty
Set
.没有Exception被抛出。 原因: DAO Object在执行PreparedStatement.executeUpdate()之前,
调用
了
Connection
.s...
Connection
.
set
Auto
Commit
使用的注意事项
原文地址:http://blog.csdn.net/xiayimiaokuaile/article/details/6422032
set
Auto
Commit
总的来说就是保持数据的完整性,一个系统的更新操作可能要涉及多张表,需多个SQL语句进行操作 循环里连续的进行插入操作,如果你在开始时
设置
了:conn.
set
Auto
Commit
(
false
); 最后才进行conn.
commit
(),这样你即使...
2020-11-02conn
set
Auto
Commit
而conn的
set
Auto
Commit
方法,是指,在事务当中,是否执行一条语句就自动
提交
一次。 想在一个事务里进行多个操作。就必然将
set
Auto
Commit
的参数
设置
成
false
,在多个操作的最后
调用
conn.
commit
()方法,进行手动
提交
默认的话为自动
提交
, 每执行一个update ,delete或者insert的时候都会自动
提交
到数据库,无法回滚事务。
设置
connection
.
set
auto
commit
(
false
);只有程序
调用
connection
.
commit
()的时候才会将先前执.
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章