三种数据库连接池的配置及使用(For JDBC)

连接池的优缺点

优点

使用连接池的最主要的优点是性能。创建一个新的数据库连接所耗费的时间主要取决于网络的速

度以及应用程序和数据库服务器的

(

网络

)

距离,而且这个过程通常是一个很耗时的过程。而采用

数据库连接池后,数据库连接请求可以直接通过连接池满足而不需要为该请求重新连接、认证到

数据库服务器,这样就节省了时间。

缺点

数据库连接池中可能存在着多个没有被使用的连接一直连接着数据库

(

这意味着资源的浪费

)

DBCP

一、导包

Apache官网下载DBCP包,导入两个包路径如下:

commons-dbcp-1.4-bin\commons-dbcp-1.4\commons-dbcp-1.4.jar:连接池的实现

commons-pool-1.5.6-bin\commons-pool-1.5.6\commons-pool-1.5.6.jar:连接池实现的依赖库

CSDN上jar包的下载地址:http://download.csdn.net/detail/u012802702/9491642

二、代码示例:

方式一:使用BasicDataSource 通过方法设置连接参数。

//获取BasicDataSource并配置,开始....

BasicDataSource source = new BasicDataSource();

source.setDriverClassName("com.mysql.jdbc.Driver");

source.setUrl("jdbc:mysql:///dbcptest");

source.setUsername("root");

source.setPassword("root");

//获取BasicDataSource并配置,结束......

try {

conn = source.getConnection();

ps = conn.prepareStatement("select * from account");

rs = ps.executeQuery();

while (rs.next()) {

String name = rs.getString("name");

System.out.println(name);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

if (rs != null) {

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

} finally {

rs = null;

}

}

if (ps != null) {

try {

ps.close();

} catch (SQLException e) {

e.printStackTrace();

} finally {

ps = null;

}

}

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

} finally {

conn = null;

}

}

}

其中的Close方法是被改写过得,及不会真正的将连接关闭,而是将其放回到连接池中,对于所有的数据源一般都会改写此方法(使用修饰)。

方式二:使用BasicDataSourceFactory +配置文件

try {               //获取并配置DataSource开始

Properties prop = new Properties();

prop.load(new FileReader("dbcp.properties"));

BasicDataSourceFactory factory = new BasicDataSourceFactory();

DataSource source = factory.createDataSource(prop);

//获取并配置DataSource,结束

conn = source.getConnection();

ps = conn.prepareStatement("select * from account");

rs = ps.executeQuery();

while (rs.next()) {

String name = rs.getString("name");

System.out.println(name);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

if (rs != null) {

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

} finally {

rs = null;

}

}

if (ps != null) {

try {

ps.close();

} catch (SQLException e) {

e.printStackTrace();

} finally {

ps = null;

}

}

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

} finally {

conn = null;

}

}

}

配置文件dbcp.properties(注配置文件中的参数的名称固定):

driver=com.mysql.jdbc.Driver

url=jdbc:mysql:///dbcptest

user=root

password=root

另:配置文件中除了可以配置以上4个数据库连接的必须信息外,还可以配置其他的参数,官方较完整的配置文件的参考如下:

#连接设置

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/jdbc

username=root

password=

#

initialSize=10

#最大连接数量,连接数连不能超过该值

maxActive=50

#

maxIdle=20

#

minIdle=5

#

maxWait=60000

#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]

#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。

connectionProperties=useUnicode=true;characterEncoding=gbk

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

defaultAutoCommit=true

#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。

#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE

defaultTransactionIsolation=READ_UNCOMMITTED

C3P0

一、导包

下载C3p0数据源的jar包导入如下jar包:

Lib\c3p0-0.9.1.2.jar

CDSN的下载地址:http://download.csdn.net/detail/u012802702/9491641

二、示例

方式一:使用代码配置参数

try{

ComboPooledDataSource source = new ComboPooledDataSource();

source.setDriverClass("com.mysql.jdbc.Driver");

source.setJdbcUrl("jdbc:mysql:///day11");

source.setUser("root");

source.setPassword("root");

conn = source.getConnection();

ps = conn.prepareStatement("select * from account");

rs = ps.executeQuery();

while(rs.next()){

String name = rs.getString("name");

System.out.println(name);

}

}catch (Exception e) {

e.printStackTrace();

}finally{

if(rs!=null){

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}finally{

rs = null;

}

}

if(ps!=null){

try {

ps.close();

} catch (SQLException e) {

e.printStackTrace();

}finally{

ps = null;

}

}

if(conn!=null){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}finally{

conn = null;

}

}

}

}

方式二:配置文件的方式加载数据库驱动信息

C3p0的使用较为简单,通常来说只要在src目录下添加一个c3p0的配置文件,在程序中使用一句代码

1)ComboPooledDataSource source = new ComboPooledDataSource()使用配置文件中的默认配置,或者

2)ComboPooledDataSource source = new ComboPooledDataSource(“配置文件中name-config的名称”)使用配置文件中的其他配置

默认情况下C3p0会在类加载路径下搜索名称为c3p0-config.xml的配置文件,因此该配置文件应该方式在类加载目录、或者jar加载目录、或者WEB-INF/classes、或类似目录下。

c3p0-config.xml文件配置如下:

com.mysql.jdbc.Driver

jdbc:mysql:///c3p0test

root

root

com.mysql.jdbc.Driver

jdbc:mysql:///c3p0test1

root

root

当然在配置文件中可以配置数据库连接池的其他相关信息,官方建议的基本配置参数有:

acquireIncrement:声明当连接池中连接耗尽时再一次新生成多少个连接,默认为3个

initialPoolSize:当连接池启动时,初始化连接的个数,必须在minPoolSize~maxPoolSize之间,默认为3

minPoolSize:任何时间连接池中保存的最小连接数,默认3

maxPoolSize:在任何时间连接池中所能拥有的最大连接数,默认15

maxIdleTime:超过多长时间连接自动销毁,默认为0,即永远不会自动销毁

C03p0的官方参考模板如下:

con_test

30000

30

10

超过多长时间连接自动销毁,默认为0,即永远不会自动销毁

30

100

10

200

10

1

0

声明当连接池中连接耗尽时再一次新生成多少个连接,默认为3个

50

当连接池启动时,初始化连接的个数,必须在minPoolSize~maxPoolSize之间,默认为3

100

任何时间连接池中保存的最小连接数,默认3

50

在任何时间连接池中所能拥有的最大连接数,默认15

1000

0

5

1

1

1

5

50

Tomcat内置数据源(DBCP)

Tomcat中内置有数据源,而DBCP与tomcat同属于Apache的项目,因此不难知道tomcat中内置的数据源其实就是DBCP数据源。使用Tomcat的内置数据源可分为两步:

一:为tomcat配置数据源

通常情况下,在使用eclipse或Myeclipse开发时,自己习惯于使用如下方式为tomcat配置数据源:

在web应用的META-INF文件夹下创建一个context.xml配置文件,并在其中添加标签进行配置,但,这种方式生成的数据源只能用于当前web应用.

详细context.xml文件的参考代码如下:

auth="Container" 作者

type="javax.sql.DataSource" 对象类型这里固定为DataSource即可

username="dbusername" 数据库连接的用户名

password="dbpassword" 连接密码

driverClassName="com.mysql.jdbc.Driver" 驱动

url="jdbc:mysql:///dbcptest" 数据库的url

maxActive="8"  DBCP的参数,DBCP的其他参数可以加入

maxIdle="4"/>

在tomcat启动时,会逐个加载其中的web应用,当其加载到当前应用时,会加载到META-INF文件夹下该context.xml配置文件,此时tomcat会根据其中的配置信息为当前web应用创建一个数据库连接池,注该数据库连接池只能用于当前web应用,tomcat下的其他web应用无法使用该数据库连接池。至于如何配置tomcat的数据库连接池才能使当前tomcat下的所有web应用都能使用,或者可以使当前虚拟主机下的web应用都能使用?请参考其他文章:http://blog.csdn.net/u012802702/article/details/51159547。

二、程序中获取数据源

当tomcat读取到context.xml配置文件时会为当前web应用创建数据源,但我们在当前web应用中如何获取该数据源对象?

Tomcat中有一个共有的容器:jndi,当Tomcat为web应用创建数据源之后会将数据源以键值对的形式存放到jndi容器当中,其中键名就是数据源配置时给定的名字(详见context.xml配置文件)。

而Tomcat会自动将jndi容器放到初始化容器InitalContext中。且jndi以固定的名字(java:comp/env)存储在InitalContext容器中,因此在web应用中可以通过如下步骤首先获取到数据源实例。

第一步:首先在Servlet中获取InitalContext容器实例

Context initCtx = new InitialContext();

第二步:在InitalContext容器中根据字符串java:comp/env搜寻,以及获取jndi容器实例

Context jndi = (Context) initCtx.lookup("java:comp/env");

第三部:根据数据源的名字从jndi容器获取到数据源实例。

DataSource source = jndi.lookUp("mySource");

完整参考代码如下:

Context initCtx = new InitialContext();

Context jndi = (Context) initCtx.lookup("java:comp/env");

DataSource source = jndi.lookUp("mySource");

但到此获取到数据源对象还没有结束,因为获取jndi的代码只能在Servlet中执行,即以上代码只能在Servlet中执行,因此还应创建一个Servlet类并在其init方法中加入以上代码,之后便可以将数据源对象传给其他程序使用(可以将数据源对象设为类变量、或将其放入到ServletContext作用域中等等)。同时将该Servlet配置成为tomcat启动时执行(即在web.xml配置文件中对应的该Servlet标签下添加:1)。

参考代码如下:

@Override

public void init() throws ServletException {

try{

Context initCtx = new InitialContext();

Context jndi = (Context) initCtx.lookup("java:comp/env");

DataSource source = (DataSource) jndi.lookup("mySource");

this.getServletContext().setAttribute(“dataSource”,source);

}catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

mysql配置数据库连接池_三种数据库连接池的配置相关推荐

  1. linux配置yum源的三种方法:

    linux配置yum源的三种方法: 1.配置网络yum源 2.通过上传镜像文件配置本地yum源 3.通过连接存储或本地镜像文件配置本地yum源(虚拟机) 配置各种yum源的时候,需要提前知道自己的li ...

  2. mysql如何防止插入重复数据_防止MySQL重复插入数据的三种方法

    新建表格 CREATE TABLE `person` ( `id` int NOT NULL COMMENT '主键', `name` varchar(64) CHARACTER SET utf8 C ...

  3. mysql 禁止插入重复数据_防止MySQL重复插入数据的三种方法

    新建表格 CREATE TABLE `person` ( `id` int NOT NULL COMMENT '主键', `name` varchar(64) CHARACTER SET utf8 C ...

  4. 在Tomcat配置JNDI数据源的三种方式

    转载自   在Tomcat配置JNDI数据源的三种方式 在我过去工作的过程中,开发用服务器一般都是Tomcat,数据源的配置往往都是在applicationContext.xml中配置一个dataSo ...

  5. MySQL buffer pool里的三种链表和三种page

    mysql buffer pool里的三种链表和三种page buffer pool是通过三种list来管理的 1) free list 2) lru list 3) flush list buffe ...

  6. MySQL、SqlServer、Oracle 三种数据库的优缺点总结

    MySQL.SqlServer.Oracle 三种数据库的优缺点总结 一.MySQL 二.SqlServer 三.Oracle 一.MySQL 优点: 体积小.速度快.总体拥有成本低,开源: 支持多种 ...

  7. Mysql清除表数据的三种方式

    Mysql 删除数据表的三种方式详解 用法: 1.当你不再需要该表时, 用 drop; 2.当你仍要保留该表,但要删除所有记录时, 用 truncate; 3.当你要删除部分记录或者有可能会后悔的话, ...

  8. mysql数据库删除数据的三种方式:

    mysql数据库删除数据的三种方式: delete from table where 直接删除表中的某一行数据,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作.所以delete相 ...

  9. Mysql连接查询主要分为三种:内连接、外连接、交叉连接

    Mysql 连接查询主要分为三种:内连接.外连接.交叉连接 内连接 使用比较运算符(包括=.>.<.<>.>=.<=.!>和!<)进行表间的比较操作,查 ...

最新文章

  1. C++中标准模板库std::pair的实现
  2. 程序员客栈携手野狗 体验国内领先的实时后端云协作
  3. 番茄花园 Ghost XP SP3 金秋国庆版 2013.AA0
  4. 2.UiSelector API 详细介绍
  5. 成果堪称“诺奖”一夜成名却无法复现的韩春雨,再发高分文章
  6. (44)VHDL实现多路复用器(if-else)
  7. PowerDesigner 学习
  8. 卷积神经网络中的池化方法(pooling)总结
  9. 计算机辅助机械设计实训教程,机械设计教学中计算机辅助设计应用
  10. 微信小程序退出到微信
  11. jquery根据HTML5视频播放实践,jQuery定制HTML 5视频播放器
  12. Windows系统介绍
  13. C# GridView 冻结列 冻结表头
  14. 美国签证经历(完善中)
  15. Math.sin() 与 Math.cos() 用法
  16. Linux操作系统网络驱动程序编写
  17. 国产CPLD中AG1280Q48进行开发的实践之一:思路分析
  18. 关闭Google安全搜索,实现无限制搜索
  19. 物联网无线串口WiFi模块,智能生活无线应用,无线WiFi模组技术
  20. 使用PHP,实现查询天府通余额

热门文章

  1. ACCESS数据库转换成SQL数据库
  2. php medoo 创建表,medoo实现数据库基本操作
  3. 源恒软件房地产税务软件-企业所得税汇算清缴系统
  4. Python中股票(对数)收益率的计算
  5. LMT70驱动—stm32f4
  6. Mockplus实例之一看就会de五个交互功能
  7. lvs+keepalive
  8. spring学习笔记 -- day02 spring基础、IOC控制反转
  9. 图片压缩怎么弄?多种图片格式压缩大小的方法
  10. 用C++求出组合个数and具体的组合数据