解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

    你可以在这一行加个断点,然后看看这一行还没执行的时候,是不是之前的update都已经commit了。
    我感觉你的这些操作不在一个transaction里。
      

  5.   

    //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();
    }   
    }   
    后来我测试了下,就是执行这两条语句,后边条报错,结果还是不能回滚,第一个插入的数据还是插入了数据库
      

  6.   

    //4、执行表语句,生成表
    meterDao.executeSql(str.toString(),conn);
    我在这里故意写入了一个有错的创建表语句,这里报错,并且打印了“回滚成功”,但是没有执行回滚操作, 前边插入数据还是插入了
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------
    COMMIT和ROLLBACK语句只应用于DML(select,update、insert、delete),建表语句是DDl。