/*
########事务&数据库连接池&DBUtils
######事务
> Transaction 其实指的一组操作,里面包含许多个单一的逻辑。
只要有一个逻辑没有执行成功,那么都算失败。 所有的数据都回归到最初的状态(回滚)
####为什么要有事务?
> 为了确保逻辑的成功。 例子: 银行的转账。
###使用命令行方式演示事务。
* 开启事务
start transaction;
* 提交或者回滚事务
commit; 提交事务, 数据将会写到磁盘上的数据库
rollback ; 数据回滚,回到最初的状态。
1. 关闭自动提交功能。
2. 演示事务
#####使用代码方式演示事务
> 代码里面的事务,主要是针对连接来的。
>
>
>1. 通过conn.setAutoCommit(false )来关闭自动提交的设置。
>2. 提交事务 conn.commit();
>3. 回滚事务 conn.rollback();
//注意当数据库不支持回滚的时候有如下原因
* 1.数据库引擎不是innodb 而是myisam,不支持事务回滚。
* 2.在rollback之前 已经通过connection.commit 提交改动 无法回滚
* 3.mysql默认create drop alter 等涉及到表修改,会隐式结束当前会话中的任何活动事务,直接提交,无法回滚。
@Test
public void testTransaction(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JDBCUtil.getConn();
//连接,事务默认就是自动提交的。 关闭自动提交。
conn.setAutoCommit(false);
String sql = "update account set money = money - ? where id = ?";