在事务里面SELECT,查询的也是事务日志里面的内容!
什么是事务?
一件事情有N个组成单元,要不这N个组成单元同时成功,要不N个单元就同时失败,就是将n个组成单元放到一个事务中(例如转账,张三账户减500元的同时,李四账户要加500元)!
MySQL事务:
① 默认事务:一条SQL语句默认开启事务,并提交事务!
② 手动事务:
1;显式的开启事务:start transaction
2;提交事务:commit(当开启了事务,写完SQL语句并不执行,而是写入事务中,等待commit命令才开始执行)!
3;事务回滚:rollback(当开启了事务,要么提交事务,要么事务回滚,当提交了事务之后,不可以再执行事务回滚)!
JDBC事务:
① 默认事务:excuteUpdate()方法,每一次执行该方法,代表事务自动提交!
② 手动事务:
1;开启事务:conn.setAutoComnmit(false);
2;提交事务:conn.commit();
3;事务回滚:conn.rollback();
//注意:操作一系列事务的Connection对象,必须是同一个,为了保证该条件,引入了ThreadLocal这个容器,在该操作是单线程的前提下,这个容器带着唯一的Connection对象,让程序在一次请求中的任何位置,都能获取该对象!
DBUTils事务操作:
QueryRunner
有参构造:QueryRunner runner = new QueryRunner(DataSource dataSource);
有参构造将数据源(连接池)作为参数传入QueryRunner,QueryRunner会从连接池中获得一个数据库连接资源操作数据库,所以直接使用无Connection参数的update方法即可操作数据库!
无参构造:QueryRunner runner = new QueryRunner();
无参的构造没有将数据源(连接池)作为参数传入QueryRunner,那么我们在使用QueryRunner对象操作数据库时要使用有Connection参数的方法!