jdbc mysql 回滚问题

J2EE 码拜 10年前 (2015-04-10) 1381次浏览 0个评论

try {
conn = jdbc.getConn();
//点禁止自动提交,设置回退  
conn.setAutoCommit(false);
//3、把表信息更新进入表(meter、meter_file)中
String metername = meter.getMeterName();
meterDao.saveMeter(meter,conn);
if(!(filelist==null||filelist.size()<1)){
Long meterid = meterDao.queryMeterId(metername,conn);
meter.setId(meterid);
meterDao.saveMeters(meter, filelist,conn);
}
//4、执行表语句,生成表
meterDao.executeSql(str.toString(),conn);

//事务提交  
conn.commit();   
} catch (SQLException e) {
e.printStackTrace();
try {
//操作不成功则回退  
conn.rollback();
System.out.println(“回滚成功”);
} catch (SQLException e1) {
e1.printStackTrace();
}   
}   

为什么我在其中报错之后没有回滚呢?

jdbc  mysql  回滚问题
其中数据库为mysql  而且表类型是  InnoDB 
jdbc  mysql  回滚问题
有输出么,哪出错了?
jdbc  mysql  回滚问题
引用 1 楼 wang263574375 的回复:

其中数据库为mysql  而且表类型是  InnoDB 

//4、执行表语句,生成表
meterDao.executeSql(str.toString(),conn);
我在这里故意写入了一个有错的创建表语句,这里报错,并且打印了“回滚成功”,但是没有执行回滚操作,

jdbc  mysql  回滚问题
引用 2 楼 bayougeng 的回复:

有输出么,哪出错了?

//4、执行表语句,生成表
meterDao.executeSql(str.toString(),conn);
我在这里故意写入了一个有错的创建表语句,这里报错,并且打印了“回滚成功”,但是没有执行回滚操作, 前边插入数据还是插入了

jdbc  mysql  回滚问题
你可以在这一行加个断点,然后看看这一行还没执行的时候,是不是之前的update都已经commit了。
我感觉你的这些操作不在一个transaction里。
jdbc  mysql  回滚问题
//2、生成数据库表
try {
conn = jdbc.getConn();
//点禁止自动提交,设置回退  
conn.setAutoCommit(false);
//3、把表信息更新进入表(meter、meter_file)中

conn.createStatement().executeUpdate(“insert into meter(id) values(“”name””)”);
conn.createStatement().executeUpdate(“insert into meter2(id) values(“”name””)”);
meterDao.executeSql(str.toString(),conn);
//事务提交  
conn.commit();   
} catch (SQLException e) {
e.printStackTrace();
try {
//操作不成功则回退  
conn.rollback();
System.out.println(“回滚成功”);
} catch (SQLException e1) {
e1.printStackTrace();
}   
}   
后来我测试了下,就是执行这两条语句,后边条报错,结果还是不能回滚,第一个插入的数据还是插入了数据库

jdbc  mysql  回滚问题
你两条分开试试。
jdbc  mysql  回滚问题
不在一个事务里面啊…
jdbc  mysql  回滚问题
把你DAO里的代码贴出来看看
jdbc  mysql  回滚问题
40分
引用 4 楼 wang263574375 的回复:
Quote: 引用 2 楼 bayougeng 的回复:

有输出么,哪出错了?

//4、执行表语句,生成表
meterDao.executeSql(str.toString(),conn);
我在这里故意写入了一个有错的创建表语句,这里报错,并且打印了“回滚成功”,但是没有执行回滚操作, 前边插入数据还是插入了

——————————————————————————————————————————————————————
COMMIT和ROLLBACK语句只应用于DML(select,update、insert、delete),建表语句是DDl。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明jdbc mysql 回滚问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!