设为首页 加入收藏

TOP

使用JDBC连接MySQL数据库--典型案例分析(三)----使用ApachDBCP连接池d(一)
2015-07-24 11:31:43 来源: 作者: 【 】 浏览:2
Tags:使用 JDBC 连接 MySQL 数据库 典型 案例分析 ---- ApachDBCP

问题:

案例要求使用Apach DBCP 连接数据池重构类DBUtility 为ConnectionSource类,并重构案例“实现DBUtility”,提供连接的获取,关闭功能的"中的EmpDAO类,在该类中使用ConnectionSource来获取连接。

方案:

直接使用JDBC访问数据库时,需要避免一下隐患:

1.每一次数据操作请求都是需要建立数据库连接,打开连接,存取数据和关闭数据等步骤。而建立和打开数据库是一件既耗资源有费时间的过程,如果频繁发生这样的数据库操作,势必会使系统性能下降。

2.连接对象代表着数据库系统的连接进程,是有限的资源。如果系统的使用用户非常多,有可能超出数据库服务器的承受极限,造成系统的崩溃。

数据库连接池是解决上述问题最常用的方法。所谓连接池,即可以创建并持有数据库连接的组件。连接池可以预先创建并封装一些连接对象并将其缓存起来,当需要使用连接对象时可以向连接池“借”一个“连接”,用完之后将其“归还”到连接池中。数据库连接池的主要功能如下:

1>连接池对象的创建和释放。

2>服务器启动时,创建指定数量的数据库连接。

3>为用户请求提供可用连接。如果没有空闲连接,且连接数没有超出最大值,创建一个新的数据库连接。

4>将用户不再使用的连接标识为可用连接,等待其他用户请求。

5>当空闲的连接数过多时,释放连接对象。

连接池组件一般都需要实现JDBC规范中的javax.sql.DataSource接口。DataSource接口定义了获取连接对象的方法getConnection()方法。常用的连接池组件有DBCP、c3p0和proxool等,本案例以Apache的DBCP组件为例,来实现数据库连接池。简单的应用代码如下;

BasicDataSource ds=new BasicDataSource();
	ds.setUrl("jdbc:mysql://127.0.0.1:3306/emp");
	ds.setDriverClassName("com.mysql.jdbc.Driver");
	ds.setUsername("wonderq");
	ds.setPassword("root");
	Connection con=ds.getConnection();
	Statement stmt=con.createStatement();
	ResultSet rs=stmt.executeQuery("select count(*) from emp")
	if(rs.next()){
			System.out.println(rs.getInt(1));
		}
	stmt.close();
	con.close();

步骤:

实现此案例需要按照如下步骤进行;

步骤一:导入使用DBCP组件所需的jar包

在当前工程下,导入使用DBCP组件所需的jar包,包括commons-dbcp.jar以及commons-pool.jar两个jar包,这两个jar包的名字可能会因为版本的不同,名字的最后版本信息,例如:commons-dbcp-1.4.jar commons-pool-1.5.jar 有时还需要commons-collections-3.1.jar

步骤二:重构db.properties

重构此文件,在该文件中添加创建数据库连接池所需的信息,包括初始化连接数、最大空闲连接数、最小空闲连接数、最大连接数量以及超时回收时间。该文件内容如下:

	jdbc.driver=com.mysql.jdbc.Driver
	jdbc.url=jdbc:mysql://127.0.0.1:3306/emp
	jdbc.user=wonderq
	jdbc.password=root
	dataSource.initialSize=10;//初始化连接大小
	dataSource.maxIdle=20;//最大空闲数
	dataSource.minIdle=5;//最小空闲数
	dataSource.maxActive=50;//最大连接数
	dataSource.maxWait=1000//超时等待时间,以毫秒为单位。

步骤三:穿件ConnectionSource类,然后在该类中添加init方法,在该方法中对数据源信息进行初始化,代码如下所示:

package dao;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import org.apache.commons.dbcp.BasicDataSource;
public class ConnectionSource {
		private static BasicDataSource dataSource=null;
		public ConnectionSource(){
		}
		public static void init(){
			Properties dbprops=new Properties();
			//取配置文件可以根据实际的不同修改
			try {
		dbprops.load(ConnectionSource.class.getClassLoader().getResourceAsStream("db.properties"));
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				String driverClassName=dbprops.getProperty("jdbc.driver");
				String url=dbprops.getProperty("jdbc.url");
				String username=dbprops.getProperty("jdbc.user");
				String password=dbprops.getProperty("jdbc.password");
				
				String initialSize=dbprops.getProperty("dataSource.initialSize");
				String minIdle=dbprops.getProperty("dataSource.minIdle");
				String maxIdle=dbprops.getProperty("dataSource.maxIdle");
				String maxWait=dbprops.getProperty("dataSource.maxWait");
				String maxActive=dbprops.getProperty("dataSource.maxActive");
				
				dataSource =new BasicDataSource();
				dataSource.setDriverClassName(driverClassName);
				dataSource.setUrl(url);
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇使用JDBC连接MySQL数据库--典型案.. 下一篇使用JDBC连接MySQL数据库--典型案..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·请问微信4.0版本xwec (2025-12-24 22:48:42)
·电脑NVIDIA的文件夹 (2025-12-24 22:48:40)
·如何看待微信新版本 (2025-12-24 22:48:37)
·C语言中如何将结构体 (2025-12-24 22:20:09)
·纯C语言结构体成员变 (2025-12-24 22:20:06)