数据库连接池

由于传统的连接数据库可能会出现大量用户同时连接的情况,这样会导致数据库崩溃,为了限制连接数和充分利用连接资源,提出了一个连接资源池的概念
目前主流的连接池有C3P0、DBCP、proxool、Bonecp、Druid
C3P0相对较慢,稳定性不错;
DBCP相对C3P0较快,但是稳定性较差
proxool有监控连接池的功能,稳定性比C3P0差
Bonecp速度快
Druid比较全面,集合了上面的优点于一身
关于连接池的jar包基本都是第三方开源,可以网上拷贝后引入项目中
演示一下C3P0的l两种使用(前提是需要引入第三方开源jar包)。不同的开源包,使用方法可能会有些区别:

public void C3P0Test1(){
	//创建一个数据源对象
	ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource ();
	//通过配置文件获取相关信息,可通过Properties类获取,下面代码就省略,对象名为properties
	...
	//给数据源设置相关参数
	comboPooledDataSource.setDriverClass(drive);//这里和下面的参数是配置中驱动的名称
	comboPooledDataSource.setJdbcUrl(url);//类似的方法还有用户名setUser、密码setPassword
	//设置初始化连接数
	comboPooledDataSource.setInitialPoolSize(num);
	//设置最大连接数
	comboPooledDataSource.setMaxPoolSize(num);
	//获取连接对象
	Connection connection = comboPooledDataSource.getConnection();	
} 

通过C3P0提供的配置文件进行连接,可以通过修改配置文件正确连接数据库

public void C3P0Test2(){
	//创建一个数据源对象
	ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource ("配置文件");
	//获取连接对象
	Connection connection = comboPooledDataSource.getConnection();	
} 

下面展示德鲁伊连接的使用,也是同样需要引入相应的第三方jar包和配置文件

public void DruidTest(){
	//获取配置文件信息
	Properties properties = new Properties();
	properties.loda(new FileInputStream("配置文件"));
	DataSource dataSource = DriudDataSourceFactory.creatDataSource(properties);
	Connection connection = dataSource.getConnection();
	
} 

上面的连接方式有个通用的弊端,就是对于result结果集无法进行处理
为了对于结果集的管理,引入DBUtils的类库,这个是Apache提供的开源JDBC的类库
该类主要是包含了QueryRunner类、ResultSetHandler
QueryRunner封装了sql执行,是线程安全,可以进行crud操作以及批处理
ResultSetHandler可以将结果集按要求转换为另一种形式
通过ResultSetHandler操作其他关于结果集的类:
ArrayHandler:把结果集中的第一行转为对象数组
ArrayListHandler:把结果集中的每一行转为对象数组,然后保存到List中
BeanHandler:把结果集中的第一行封装到JavaBean实例中
BeanListHandler:把结果集中的每一行封装到JavaBean实例中,然后保存到List中
ColumnListHandler:将结果集中的某一列保存到List中
KeydHandler(name):把结果集中的每一行封装到Map中,再把这些Map保存到Map里,key为指定的参数
MapHandle:将结果集的第一行封装到Map中,key就是列名,value就是对应的值
MapListHandler:把结果集中的每一行封装到Map中,然后保存到List中
下面展示DBUtils的用法,同样需要引进DBUtils第三方的类库jar:

public void DBUtilstest(){
	//先通过德鲁伊连接
	Connection connection = JDBCUtilsByDruid.getConnection();
	QueryRunner queryRunner = new QueryRunner();
	String sql = "sql语句";
	//接下来就可以使用QueryRunner得到结果集
	List<tablename> list 
	    = queryRunner.query(connection,sql,new BeanListHandle<>(tablename.class),value...)
	//可以通过增强for遍历输出list中的元素
	//curd操作,方法都是update
	int affetedRow = queryRunner.update(connection,sql,value...);
}

通过这些第三方类库,可以大大简化开发,但还是有一些不足
1、sql固定,无法变通
2、sql操作如果有返回值,类型不能固定,只能用泛型
3、业务一般不会依靠一个java完成,多数情况是需要多个java
这就催生出了BasicDAO这个类,这个类把每个DAO类通用部分提取到BasicDAO里面
然后每个表的DAO类继承这个BasicDAO类,可以添加自己独有的部分方法
然后在主类就可以灵活运用这些类,而且可以现写sql作为参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值