一,事务
1.mysql数据库默认事务自动提交,每一条sql就是一个事务,oracle事务默认不提交,需要在执行sql后,通过commit手动提交
con.setAutoCommit(false);//开启事务
con.commit;手动提交事务
con.rollback;回滚事务
注意:con必须是同一个
@transaction spring事务管理底层做的就是这个
2.事务的四大特性
1)原子性:事务中操作不可分割,要么全部成功,要么全部失败
2)一致性:必须保证数据完整性一致
3)隔离性:多个事务操作同一条数据记录,事务之间相互隔离,不互相影响
4)持久性:事务提交后,sql执行的数据将永久改变,不能恢复,持久化
二,连接池
1.数据库三步操作中,获取连接connection最占用数据库资源
一次性创建多个连接,将多个连接缓存在内存中 ,形成数据库连接池
(内存数据库连接集合)
如果应用程序需要操作数据库,只需要从连接池中获取一个连接,使用后,并不需要
关闭连接,只需要将连接放回到连接池中。
好处:节省创建连接与释放连接性能消耗 ---- 连接池中连接起到复用的作用,提供程序性能
2.连接池获取数据库连接
// 核心连接池类
ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
//设置四个JDBC基本连接属性
comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");
comboPooledDataSource.setJdbcUrl("jdbc:mysql:///day14");
comboPooledDataSource.setUser("root");
comboPooledDataSource.setPassword("abc");
Connection con =comboPooledDataSource.getConnection();
3.连接池属性
acquireIncrement 如果连接池中连接都被使用了,一次性增长3个新的连接
initialPoolSize 连接池中初始化连接数量 默认:3
maxPoolSize 最大连接池中连接数量 默认:15连接
maxIdleTime 如果连接长时间没有时间,将被回收 默认:0 连接永不过期
minPoolSize 连接池中最小连接数量 默认:3
4.
DriverManager.getConnection()和DataSource的getConnection()有什么区别?
前者创建一个连接,后者从连接池获取一个连接
前者的close()是释放Connection,而后者的close()只会把Connection归还给连接池