猪猪的IT之路---Java成长之路(JDBC工具类+连接池)
解决JDBC重复代码:
-
编写工具类:JDBCUtils
编写获取连接方法
编写释放资源方法 -
编写dao的父类:BaseDao
使用Properties文件作为数据库配置文件:
文件一般命名:XXX.properties
文件中的数据:key=value,key名自定义
在程序中读取属性文件:
类名.class.getClassLoader().getResourceAsStream(“文件名”);通过当前类的类加载器读取src下的文件
数据库连接池:
问题:
如果程序中没有使用数据库连接池,那么用户每次请求都需要向数据库获取连接,而数据库创建连接需要消耗大量资源,并且创建时间也比较长,那么如果项目访问量过大,这就会造成数据库资源的极大浪费,并且很大可能出现数据库服务器的内存溢出,死机。
解决办法:使用数据库连接池优化程序
直接连接数据库
使用连接池
连接池:在程序初始化后就创建一定数量的数据库连接在连接池中,在需要使用连接访问数据库时,从连接池中获取,当使用完后,该连接会返回池中,而不是关闭
数据库连接池是负责分配,管理,释放数据库连接,允许程序重复使用现有的数据库连接,而不是重新创建
编写原生数据库连接池:(了解)
1.首先需要使用javax.sql.DataSource接口
2.在连接池类中生成多个连接存入LinkedList中
3.实现getConnection方法,返回的是一个被代理对象
在实际开发中都是使用开源连接池
目前主流:
Dbcp:没有回收空闲连接方法
C3p0:有自动回收空闲连接方法
Druid(阿里云公司开发)
使用c3p0开发步骤:
- 添加jar
jar包百度云链接:https://pan.baidu.com/s/1GBEN29y46MlsOLVcH4YpPw
提取码:fsdr
-
编写连接池配置文件,c3p0-config.xml
第一种写法:第二种写法:
-
使用连接池
在连接池中使用conn.close()是将连接放回池中,不是关闭连接,底层是通过动态代理方式实现该功能