days03
12. Druid(德鲁伊)数据库连接池连接方式、配置文件,详见尚硅谷JDBC_P44
1. 事务
内涵:一组逻辑操作单元,使数据从一种状态变换到另一种状态(一个或多个DML操作);
原则:保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。
当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;
要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态。
2. 哪些操作会导致数据自动提交(提交后不可回滚)
- DDL 操作:下述取消的方式对 DDL 操作失效;
- DML 操作(增删改查):可以设置 autocommot = false 的方式,取消自动提交;
- 默认关闭连接时,会自动提交数据;
3. 如果执行完程序时,Connection 没有被关闭,还可能被重复使用,则需要恢复其自动提交状态;
setAutoCommit(true),尤其是在使用数据库连接池技术时,执行close()方法前,建议恢复自动提交状态。
4. 事务的ACID属性
- 原子性(Atomicity) 指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
- 一致性(Consistency) 事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
- 隔离性(Isolation) 指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。
5. 并发与四种隔离级别
数据库的并发问题
-
- 脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段。之后, 若 T2 回滚, T1读取的内容就是临时且无效的。
- 不可重复读: 对于两个事务T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段。之后, T1再次读取同一个字段, 值就不同了。
- 幻读: 对于两个事务T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行。之后, 如果 T1 再次读取同一个表, 就会多出几行
四种隔离级别
Oracle 默认的事务隔离级别为: READ COMMITED 。
Mysql 默认的事务隔离级别为: REPEATABLE READ。
隔离级别越高, 数据一致性就越好, 但并发性越弱。
6. Java代码设置隔离级别
① 获取当前隔离级别:Connection.getTransactionIsolation();
② 设置数据库的隔离级别:Connection.setTransactionIsolation(Connection.xxxxx);
7. 对于某张表的操作规范
① 定义 xxx表的接口规范 xxxxDAO 接口,声明各个接口的参数、作用等;
② 提供 xxx表的具体实现类,命名为 xxxxDAOImpl
8. 数据库连接池
① 数据库连接池的基本思想:就是为数据库连接建立一个“缓冲池”。
预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
② 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
9. 数据库连接池技术的优点
资源重用:由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销。
在减少系统消耗的基础上,另一方面也增加了系统运行环境的平稳性。
更快的系统反应速度:数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于连接池中备用。此时连接的初始化工作均已完成。
对于业务请求处理,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,减少了系统的响应时间;
新的资源分配手段:对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接池的配置;
实现某一应用最大可用数据库连接数的限制,避免某一应用独占所有的数据库资源
统一的连接管理,避免数据库连接泄漏:在较为完善的数据库连接池实现中,可根据预先的占用超时设定,强制回收被占用连接;
从而避免了常规数据库连接操作中可能出现的资源泄露。
10. C3P0 数据库连接池连接方式、配置文件,详见尚硅谷JDBC_P41
11. DBCP 数据库连接池连接方式、配置文件,详见尚硅谷JDBC_P42
标签:事务,JDBC,数据库,DAO,T2,T1,DBUtils,连接,连接池 From: https://www.cnblogs.com/LinxhzZ/p/16755303.html