1&2&3 : 好像ALTER TABLE TEST2 这样的DDL语句,不支持事务管理
4:从韩树名字上就可以看出亚。

解决方案 »

  1.   

    要回滚只要抛出例外就行了,
    catch(Exception ex) {
        throw ex;
    }
    你对例外的处理只是把它显示了一下,相当于没做什么处理。
    要不你就调试一下,看看rollback()能不能走到。
    execute与其他的executeQuery,executeUpdate的区别建议你看javadoc
      

  2.   

    觉得应该这样用
    catch(SQLException se) {
    conn.rollback(); 
    conn.setAutoCommit(true);
    stmt.close();conn.close();}
      

  3.   

    DDL(Data Define Language)语句不能rollback的,因为它执行完后会自动做一个commit。
    而DML可以roollback.我想这主要是出于维护数据一致性的考虑。
      

  4.   

    同意yannqi(燕祺)
    执行SQL出错的话抛出SQLException
      

  5.   

    DDL语句不需要commit,也不能rollback,而且rollback也只是对插入成功但是没有commit的数据而言,这样可以保证数据的完整性。而你这里出错的应该是 stmt.executeUpdate("INSERT INTO TEST2 VALUE(1,'NEW','NEW2')"); //SQL3 这个语句,现在你的表有4个字段,而你只提供了3个值又不说明需要插入哪3个字段,当然会出错。前一个插入语句应该成功了,执行的结果应该是将插入成功的数据删除了(rollback的作用)。
    其实有很多东西我们只需要知道就行了,一味执着的追求原因可能将会一无所得。