问题描述
conn = JDBCUtil.generateConn(); conn.setAutoCommit(false); logger.info("commit false"); RosDao.deleteZLIFNRRGT(jbxxbean.getNAME1(), conn); RosDao.deleteZBP_PROD_CAT(jbxxbean.getNAME1(), conn); RosDao.deleteZBP_PUR_CAT(jbxxbean.getNAME1(), conn);一个事物涉及多个数据库操作,在每个被调的方法里都要关闭 conn 么,还是在主方法一起关
解决方案
这三个方法用的是同一个conn,关闭了就没有事务的概念了,try{ conn = JDBCUtil.generateConn(); conn.setAutoCommit(false); logger.info("commit false"); RosDao.deleteZLIFNRRGT(jbxxbean.getNAME1(), conn); RosDao.deleteZBP_PROD_CAT(jbxxbean.getNAME1(), conn); RosDao.deleteZBP_PUR_CAT(jbxxbean.getNAME1(), conn); }catch(Exception e){ conn.rollback();}finally{ //此处conn并未真正关闭,交给数据库连接池维护 //下面两句谁在前谁在后并不影响 JDBCUtil.close(conn); conn.setAutoCommit(true); }
解决方案二:
处理原则是哪边开启连接的,就在那个方法里面关闭连接,如果放到调用方法里面处理连接的关闭将会把事情搞得很复杂,不好处理。
解决方案三:
只需要在这里统一关闭就行了。finally{ JDBCUtil.close(conn); }