数据库连接池(DBCP、C3P0、Druid); Commons DbUtils工具类库

数据库连接池

为什么要有连接池?

​ 由于建立数据库连接是一种非常耗时、耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,使用完毕后再归还到连接池中,能明显提高对数据库操作的性能。

一、DBCP连接池

​ DBCP(DataBase Connection Pool)数据库连接池,是Java数据库连接池的一种,由Apache开发,通过数据库连接池,可以让程序自动管理数据库连接的释放和断开。

使用步骤:

1、导入 jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar)

2、配置信息

采用硬编码方式

	//创建连接池
	BasicDataSource ds = new BasicDataSource();
	//配置信息
	ds.setDriverClassName("com.mysql.jdbc.Driver");
	ds.setUrl("jdbc:mysql:///mydb");
	ds.setUsername("root");
	ds.setPassword("123456");
	//ds.setMaxWait(5000); //设置最大等待连接时间
	//其他参数也可自行调用方法设置,不设置即为默认值

采用配置文件方式

Java代码
	Properties properties = new Properties();
    properties.load(new FileReader("src/dbcp.properties"));
	//创建一个工厂,获取连接池
    DataSource ds = new BasicDataSourceFactory().createDataSource(properties);
配置文件
#连接基本设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb
username=root
password=123456

#<!--扩展配置 了解-->
#初始化连接
initialSize=10

#最大连接数量
maxActive=50

#<!-- 最大空闲连接 -->
maxIdle=20

#<!-- 最小空闲连接 -->
minIdle=5

#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000

#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] 
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=gbk

#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true

#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=

#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED

3、获取连接对象

Connection conn = ds.getConnection();

二、C3P0连接池

​ C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。

使用步骤:

1、导入jar包(c3p0-0.9.1.2.jar)

2、配置信息

采用硬编码方式

	ComboPooledDataSource ds = new ComboPooledDataSource();
	//设置基本参数
	ds.setDriverClass("com.mysql.jdbc.Driver");
	ds.setJdbcUrl("jdbc:mysql:///mydb");
	ds.setUser("root");
	ds.setPassword("123456");

采用配置文件方式

采用此方式需注意:

要求1:配置文件的名称:c3p0.properties 或者 c3p0-config.xml

要求2:配置文件的路径:必须在 src 下

	//new ComboPooledDataSource()	//使用默认的配置

	//使用命名的配置 若配置的名字找不到,使用默认的配置
	//new ComboPooledDataSource(String configName)
	
	//c3p0-config.xml的第二种配置
    ComboPooledDataSource ds = new ComboPooledDataSource("MyConfig");
c3p0.properties
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql:///mydb
c3p0.user=root
c3p0.password=123456
c3p0-config.xml
<c3p0-config>
	<!-- 默认配置,如果没有指定则使用这个配置 -->
	<default-config>
		<!-- 基本配置 -->
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/mydb</property>
		<property name="user">root</property>
		<property name="password">123456</property>
	
		<!--扩展配置-->
		<property name="checkoutTimeout">30000</property>
		<property name="idleConnectionTestPeriod">30</property>
		<property name="initialPoolSize">10</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
		<property name="maxStatements">200</property>
	</default-config> 
	
	
	<!-- 命名的配置 第二配置 -->
	<named-config name="MyConfig">
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/mydb</property>
		<property name="user">root</property>
		<property name="password">123456</property>

		<!--扩展配置-->
		<property name="acquireIncrement">5</property>
		<property name="initialPoolSize">20</property>
		<property name="minPoolSize">10</property>
		<property name="maxPoolSize">40</property>
		<property name="maxStatements">20</property>
		<property name="maxStatementsPerConnection">5</property>
	</named-config>
</c3p0-config>

3、获取连接对象

Connection conn = ds.getConnection();

三、Druid 阿里德鲁伊连接池

​ DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池。

使用步骤:

1、导入jar包(druid-1.1.9.jar)

2、配置信息

采用硬编码方式

     //创建数据源
     DruidDataSource ds = new DruidDataSource();
     ds.setDriverClassName("com.mysql.jdbc.Driver");
     ds.setUrl("jdbc:mysql:///mydb");
     ds.setUsername("root");
     ds.setPassword("123456");

采用配置文件方式

	Properties properties = new Properties();
    properties.load(new FileReader("src/druid.properties"));
	//通过一个工厂类,创建一个数据源
	DataSource ds =new DruidDataSourceFactory().createDataSource(properties);
配置文件
#基本配置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/mydb
username=root
password=123456
#可选配置
filters=stat
initialSize=2
maxActive=300
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200

3、获取连接对象

Connection conn = ds.getConnection();

DBUtils 工具类库

​ Commons DbUtils 是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,
使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。

//导入jar包(commons-dbutils-1.4.jar)
//创建 QueryRunner 对象
    Properties properties = new Properties();
    properties.load(new FileReader("src/druid.properties"));
    DataSource dataSource = new DruidDataSourceFactory().createDataSource(properties);
    //注意传入数据源
    QueryRunner queryRunner = new QueryRunner(dataSource);
	//编写执行SQL语句
	//编写执行DML、DQL语句  返回值:影响的行数 参2、参3为问号的值
    int i = queryRunner.update("insert into users values(?,?)", "张三", "123456");
	//查询语句
	//BeanListHandler 把从数据库查出来的多条数据,封装到对象里面,再把对象放到集合里面
	List<User> list = queryRunner.query("select * from users", new BeanListHandler<User>(User.class));
	//BeanHandler 查询一条结果,把这个结果封装进对象里面
    User user = queryRunner.query("select * from users", new BeanHandler<User>(User.class));
	// MapHandler 把查询的结果封装到Map集合里面
	Map<String, Object> map = queryRunner.query("select * from users", new MapHandler());
发布了55 篇原创文章 · 获赞 23 · 访问量 4337

猜你喜欢

转载自blog.csdn.net/y_Engineer/article/details/100561484