求教JDBC事务控制,为什么没有回滚?
- Java code
Connection conn = null; PreparedStatement pstmt = null; try { conn = DriverManager.getConnection(XXX,XXX,XXX); conn.setAutoCommit(false); [color=#FF0000]pstmt = conn.prepareStatement("INSERT INTO XXXX");//执行插入操作 1[/color] pstmt.addBatch(); //省略中间代码 [color=#FF0000]pstmt.addBatch(sql1);//执行修改操作 2[/color] pstmt.addBatch(sql2);//执行修改操作 pstmt.addBatch(sql3);//执行修改操作 pstmt.executeBatch(); conn.commit(); } catch (Exception e) { e.printStackTrace(); try { if (conn != null){ [color=#FF0000] conn.rollback();//此处被调用 3[/color] } } catch (SQLException e1) { e1.printStackTrace(); } }finally{ if(pstmt != null) try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); pstmt = null; } if(conn != null) try { conn.close(); } catch (SQLException e) { e.printStackTrace(); conn = null; } }
标记2出错,标记1插入的数据仍然进入数据库,调试跟踪发现标记3处代码被执行并且没有异常,执行了回滚操作,但是为什么数据还是被插入数据库了,求教?
[解决办法]
mysql数据库新表默认不支持事务。
[解决办法]
[解决办法]
show variables like 'have_%'
看看有没有have_innodb
确定你的表type是InnoDB?
MySQL中只有InnoDB和BDB支持事务
哎,mysql这种免费的东西...好久好久没用了,的确各方面都达不到我的要求诶
现在要么商业应用就用用MSSQL,简单应用就上SQLITE了,这东西还不错
[解决办法]
如果不是批量操作呢?只插一条试试看回不回滚。。如果插一条没问题的话,估计就是批量的问题了,偶没试过。。