msmysql 2020-06-21
为了防止某些具有连带性的业务发生异常,导致数据库数据产生非正常的变化,需要对这些业务进行事务管理。这些被事务进行管理的一系列与数据库相关的操作,要么同时成功,要么同时失败。在进行如银行转账的关联操作的业务上,解决了不必要的麻烦。
Java中通过数据库连接对象来进行事务管理
这里以 mysql 例,在java中, mysql 默认开启事务自动提交,即没执行完一条完整的 mysql 语句,就会被提交,相当于每一条 mysql 语句被单独的事务进行管理。我们需要对多条 mysql 进行管理,所以,首先我们需要进行以下操作:
关闭默认的事务自动提交,即 开启事务管理,手动提交事务。
手动提交事务,当所有sql被正常执行完后,进行事务提交。
事务回滚,当被事务管理的某条sql发生异常,则所有被事务管理的记录将会恢复到进入事务管理之前的状态。
基本语法示例:
... try { /* 1.开启事务管理:关闭事务自动提交(通过数据库连接对象) */ conn.setAutoCommit(false); // 预处理SQL ps = conn.prepareStatement(sql); // 设置SQL参数 ps.setString(n, parameter); // 执行SQL语句 ps.execute(); /* 提交事务 */ 2.conn.commit(); } catch (SQLException throwables) { /* 事务回滚 */ try { if (conn!=null){ conn.rollback(); } } catch (Exception throwables) { throwables.printStackTrace(); } throwables.printStackTrace(); } finally { // 释放资源 DB.close(rs,ps,conn); } ...