一个导数据的处理,交付给测试人员测试发现一个问题.就是数据异常,按需求来说是发生异常不导入任何数据,但是
测试时导数据异常,之前正确的信息也导了进去.调试是看到是在stmt.executeBatch();出错,然后跳到catch块里,
没有提交,前面也设了conn.setAutoCommit(false);竟然不自动回滚,其他类型的文件的导入也是这样去实现的,
没有出现这种状况,实在找不到原因就在catch块里加了conn.rollBack();然后就没问题了.不知道为什么没有自动回滚.try{
  ... ...
  stmt = conn.prepareStatement(inSql);
  conn.setAutoCommit(false);
  stmt.clearBatch();
  ... ...
  if(flag)
    delStmt.executeBatch();
  stmt.executeBatch();    //程序执行到这一步出错
  conn.commit();
}catch(Exception ex){
  DataDriverLog.log.info("... ...");
  throw new Exception("... ...");
}

解决方案 »

  1.   

    啥数据库?要是mysql
    我们大家都知道MySQL数据库主要有2种类型,一是数据表格式(传统),二是支持事务处理的数据表格式;MyISAM引擎没有事务概念,只加表级锁要用事务可以考虑用InnoDB
      

  2.   

    楼主是用的mysql吗?我觉得你应该在获得Connection的时候就将它设置成手动提交。
      

  3.   

    用的是Oracle,而且我的就是手动获得的conn,也设置了手动提交....
    等待专业点的来解答 ... ...