package com.servletjsp.utils;
import javax.sql.DataSource;
import org.apache.commons.dbutils.QueryRunner;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**1.使用DBUtils工具连接数据库进行数据的相关操作
* 2.DBUtils来自apchede 子项目,是一个对jdbc操作数据库语句的封装,简化了jdbc复杂的操作语句流程,全程最重要的对象是Queryrunner对象,该对象实现了对数据库的操作
* 语句的调用,查询单体对象数据时候用BeanHandler<object>(object.class)对象,返回的是一个对象类型;查询聚合函数使用ScalarHandler<>()对象;增删改都用update方法,
* 直接在方法内放sql语句和参数;查询时候参数放在BeanHandler对象后,查询所有数据时用ResultSetHandler<list<object>>();使用简单,易学。
* 3.使用c3p0数据连接池进行数据库连接操作,c3p0代替jdbc的优点就是连接方便简单,其使用数据连接池子化,其核心就是在连接的中间设置一个list集合,其内部包含了connction,设置初始化大小
* 当使用者需要connection时候,就会从结合中使用remove方法,获取一个现有的connection,当connection使用完后,在调用connection。close(),方法将connection放回到池子中去,
* 在池子中包含初始化大小,和每次增长的实例及最大连接数量,等的设置。c3p0的配置文件直接放到src路径下面系统自动加载文件识别,不需设置读取配置文件。
*
* 4.使用单例模式实现数据连接池的配置实现, 使用单例几点:第一构造方法私有化, 第二静态应用指向自生,第三以自己实例为返回值的公有静态方;
* @author Administrator
*
*/
public class DBUtils {
private static DBUtils jdbcUtils;
//数据源,数据连接池
private static ComboPooledDataSource dataSource;
static {
//初始化数据源
dataSource=new ComboPooledDataSource();
}
//私有化构造方法,禁止外部代码实例化对象
private DBUtils() {
}
//实例化对象,单例的设计实现,提供对外访问实例的静态方法
public static DBUtils getInstence() {
//判断 如果实例为空才创建实例,这样保证实例的使用效率。
if(jdbcUtils==null) {
jdbcUtils=new DBUtils();
}
return jdbcUtils;
}
//创建数据连接池的queryrunner对象, 配置数据连接池
public QueryRunner getQuery() {
QueryRunner queryRunner=new QueryRunner(dataSource);
return queryRunner;
}
//获取DataSource数据源 ,将connection连接放到数据连接池中
public DataSource getDataSource() {
return dataSource;
}
}
//c3p0.properties 配置文件
#驱动类
c3p0.driverClass=com.mysql.jdbc.Driver
#连接URL
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/taotao
#用户
c3p0.user=root
#密码
c3p0.password=mysql
#初始化大小
c3p0.initialPoolSize=3
#最小池子数量
c3p0.minPoolSize=3
#设置最大连接数量
c3p0.maxPoolSize=10
#最大等待空闲时间
c3p0.maxIdleTime=60