视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySql数据库连接池_MySQL
2020-11-09 19:43:21 责编:小采
文档
 1.传统链接(如下为示意图)

注意:

(1).传统方式找DriverManager要连接,数目是有限的。

(2).传统方式的close(),并没有将Connection重用,只是切断应用程序和数据库的桥梁,即无发送到SQL命令到数据库端执行

(3).项目中,对于Connection不说,不会直接使用DriverManager取得,而使用连接池方式。

2.采用连接池(示意图)

3.开源数据库连接池

(1).现在很多Web服务器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。
(2).也有一些开源组织提供了数据源的实现:
DBCP 数据库连接池(tomcat)
C3P0 数据库连接池(hibernate)
(3).实际应用时不需要编写连接数据库代码,直接从数据源获得数据库的连接。程序员编程时也应尽量使用这些数据源的实现,以提升程序的数据库访问性能。

4.C3P0的使用:
(1).在classpath的路径下配置xml文件,即src的文件下而且这个文件名必须是c3p0-config.xml

原始的c3p0-config.xml的文件参数:


	
	
	3

	
	30

	
	1000

	
	false

	
	Test

	
	false

	
	100

	
	

	
	null

	
	false

	
	60

	
	3

	
	60

	
	15

	
	100

	
	

	
	3

	
	root

	
	password

	
	

	
	select id from test where id=1
	

	
	300

	
	false

	
	true

	
	root

	
	false
	con_test
	30000
	30
	10
	30
	25
	10
	0
	
	
	
	
	200
	
	300
	
	
实战练习:
1>.首先配置c3p0-config.xml文件


	
	com.mysql.jdbc.Driver
	root
	wwh
	jdbc:mysql://127.0.0.1:3306/jdbctest
	

2>.代码操作连接(TestC3P0.java)
package cn.wwh.www.java.jdbc.datasource;

import java.sql.Connection;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 *类的作用:
 *
 *
 *@author 一叶扁舟
 *@version 1.0
 *@创建时间: 2014-9-2 上午12:02:13
 */

//测试连接池C3P0的用法
public class TestC3P0 {
	public static void main(String[] args) throws Exception {
	long begin = System.currentTimeMillis();
	//创建C3P0连接池,并加载c3p0-config.xml文件
	ComboPooledDataSource dataSource = new ComboPooledDataSource();
	for(int i=1;i<=1000000;i++){
	Connection conn = dataSource.getConnection();
	if(conn!=null){
	System.out.println("获取连接第"+i+"个");
	conn.close();
	}
	}
	long end = System.currentTimeMillis();
	System.out.println("用了" + (end-begin)/1000+"秒");
	}
}

5.DBCP的使用:
(1).采用类加载的方式,文件名是:dbcp.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/jdbctest
username=root
password=wwh
(2).在代码中使用(TestDBCP.java)
package cn.wwh.www.java.jdbc.datasource;

import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

/**
 *类的作用:采用DBCP连接池的方式去获取数据库的链接,并测试他的时间
 *
 *
 *@author 一叶扁舟
 *@version 1.0
 *@创建时间: 2014-9-1 下午09:27:59
 */

//测试连接池DBCP的用法
public class TestDBCP {
	public static void main(String[] args) throws Exception {
	long begin = System.currentTimeMillis();
	//加载属性文件
	InputStream is = TestDBCP.class.getClassLoader().getResourceAsStream("cn/wwh/www/java/jdbc/config/dbcp.properties");
	Properties props = new Properties();
	props.load(is);
	//创建DBCP连接池工厂
	BasicDataSourceFactory factory = new BasicDataSourceFactory(); 
	//创建数据源,即连接池
	DataSource ds = factory.createDataSource(props);
	for(int i=1;i<=1000000;i++){
	//从连接池中取得一个空闲的连接对象
	Connection conn = ds.getConnection();
	if(conn!=null){
	System.out.println("获取连接第"+i+"个");
	}
	//将连接对象还回给连接池
	conn.close();
	}
	long end = System.currentTimeMillis();
	System.out.println("用了" + (end-begin)/1000+"秒");
	}
}
第一的测试时间为18秒,第二个的测试时间为13秒,不同的机器性能不一样,测试的时间快慢也不可能。但是理论上C3P0的速度应该更快,但是我测试的数据却恰恰相反,很是奇怪。

总结:

1>DBCP和C3P0,都是Java开源的,都必须直接或间接实现javax.sql.DataSource接口
2>DBCP连接池需要dbcp.properties文件,同时需加入3个对应的jar包
3>C3P0连接池需要在/WEB-INF/classes/目录下存放c3p0-config.xml文件,该类ComboPooledDataSource在创建时
会自动在指定的目录下找xml文件,并加载默认设置

4>tomcat用的也是c3p0

6.导入的jar包

commons-dbcp.jar:DBCP实现要导入的jar

commons-pool.jar: 连接池实现的依赖类

commons-collections.jar :连接池实现的集合类

c3p0-0.9.1.2.jar :C3P0实现要导入的jar包

下载本文
显示全文
专题