日期:2014-05-20  浏览次数:20794 次

JDBC连MYSQL事务处理
小弟在学 JDBC 连MYSQL编程
关于事务的实现 我写的代码是
try
{
    Class.forName("com.mysql.jdbc.Driver");
   conn = DriverManager.getConnectio("jdbc:mysql://localhot:3306/hkasdb", "root", "");
   conn.setAutoCommit(false);
   Statement statement = conn.createStatement();
   statement.executeUpdate("truncate table tas_CMMenu");
   String sql = "insert into tas_CMMenu values ('00000',2,'00000#00000','')";
   statement.executeUpdate("insert into tas_CMMenu values ('00000',4,'00000#00','')");
   statement.executeUpdate(sql);
   conn.commit(); 
   conn.close();
}
catch(Exception ex)
{
    try 
    {    
       conn.rollback();    
    }    
    catch(Exception e)
    {    
        e.printStackTrace();    
    }  
}

我自己测试了下 发现如果是语句是
insert/update/delete可以回滚,前面的执行语句可以取消.

但是truncate就不行了
如truncate table XXX
  insert into table XXX(一条错误语句)
回滚后,发现表内的数据还是清空了

想请教下各位大牛我这个代码有啥问题吗
MySQL JDBC 事务

------解决方案--------------------
truncate table是删除所有数据。
你删除完,没事务提交,又插入
------解决方案--------------------
1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。
2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
------解决方案--------------------
truncate table无法回滚,会清除掉所有的数据