conn.setAutoCommit(false);设置事物手动提交

    xiaoxiao2021-12-14  18

    参数: autoCommit -- true表示启用自动提交模式;为 false表示禁用该模式

    默认的话为自动提交,每当执行一个update ,delete或者insert的时候都会自动提交到数据库,无法回滚事务。

    使用举例:

                         ConnectionsqlManager = SQLManager.getConnection();

                         //一般来说不用setAutoCommit(true),因为大部分的驱动默认是true;                      sqlManager.setAutoCommit(true);                      Statement stmt = sqlManager.createStatement();

                         ***********

                         ***********

     

    当涉及事务处理时将setAutoCommit(false); 然后事务完后commit一下

    如果设置sqlManager.setAutoCommit(false);的话,则在语句正常执行完毕后需要用sqlManager.commit()手动提交,如果在执行语句时出错的可以调用sqlManager.rollback()来回滚!

                        

                         ConnectionsqlManager = SQLManager.getConnection();

                         //设置事物为手动提交;                      sqlManager.setAutoCommit(false);

                         Statementstmt = sqlManager.createStatement();

                         *************

                         ************                      // 提交事物;                      sqlManager.commit();

     

    完整例子(添加角色,因为角色和账号之间存在中间表,所以需要设置)

    public void addRole(Role role, String[] menuIds) { Connection conn = null; try {

    // 获取数据库连接对象 conn = C3P0Util.getConnection(); // 设置事物手动提交 conn.setAutoCommit(false); // 添加角色基本信息, 添加完成之后将新增角色ID设置到 role 对象当中,用于添加中间表时使用 roleDAO.add(role, conn); // 添加角色菜单关联关系 roleDAO.addRoleToMenu(role.getId(), menuIds, conn);

     // 提交事物; conn.commit(); } catch (Exception e) { try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { C3P0Util.close(conn, null, null); } }

    truesql命令的提交(commit)由驱动程序负责

    falsesql命令的提交由应用程序负责,程序必须调用commit或者rollback方法

     

     

    转载请注明原文地址: https://ju.6miu.com/read-965004.html

    最新回复(0)