[5-03]事务和连接池

来源:互联网 发布:ssh建立连接的端口号 编辑:程序博客网 时间:2024/05/29 17:32

一,事务

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归还给连接池





原创粉丝点击