这几天在学习使用MVC模式来做几个小项目,在学习的过程中,用到了数据库连接池。便特意去学习了一下。

一、谈一谈为什么要使用数据库连接池

  在开发基于数据库的web程序时,传统的模式(在servlet,beans 中建立数据库链接,进行sql操作, 断开数据库链接) 存在着一些问题。

  每次连接都需要验证用户,消耗了大量的资源和时间。数据库的连接资源并没有得到很好地重复利用。再如,同时几万人在线频繁的连接数据库,系统资源消耗巨大,内存可能泄漏,服务器也可能会崩溃。

二、什么是数据库连接池

  1.基本思想:可以为数据库建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需要从“缓冲池”中取出一个,使用完毕再放回去,避免了重复连接所消耗的时间与资源。

  

  2.职责:数据库连接池负责分配,管理,和释放数据库链接,它允许应用程序重复使用一个现有的数据库链接,而不是新建立一个。

  

  3.JDBC的数据库链接池使用javax.sql.DataSource 来表示,DataSource 只是一个接口,该接口通常由服务器(Webblogic,Tomact)提供实现,也有一些开源组织提供实现:DBCP,C3P0。

三、使用C3P0 数据库连接池

  C3P0有两种连接方式。

  1.第一种:

    具体步骤:

      1.导入所需jar包

      2.java代码

      

 import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JDBCUtils {
private static Connection conn=null;
private static ComboPooledDataSource comboPooledDataSource=new ComboPooledDataSource(); public static Connection getConnection(){
try {
comboPooledDataSource.setDriverClass("com.microsoft.sqlserver.jdbc.SQLServerDriver");
comboPooledDataSource.setJdbcUrl("jdbc:sqlserver://localhost:1433;databasename=mysql");
comboPooledDataSource.setUser("sa");
comboPooledDataSource.setPassword("1546873"); comboPooledDataSource.setAcquireIncrement(5);// 可以设置连接池的各种属性 conn=comboPooledDataSource.getConnection();
} catch (PropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
} }

  2.第二种:

    具体步骤:

      1.导入jar包

      2.配置xml文件。 配置文件名必须名为 c3p0-config.xml 并且放在src目录下

      代码如下

 <c3p0-config>
<named-config name="myc3p0">
<property name="user">sa</property>
<property name="password">ztg591379771</property>
<property name="driverClass">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="jdbcUrl">jdbc:sqlserver://localhost:1433;databasename=mysql</property> <!-- 若数据库中连接数不足时,一次向数据库服务器申请多少个链接 -->
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement">5</property> <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize">10</property> <!--连接池中保留的最小连接数。-->
<property name="minPoolSize">10</property> <!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize">50</property> <!-- intergalactoApp adopts a different approach to configuring statement caching --> <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
<property name="maxStatements">20</property> <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
<!-- 每个链接可以使用的Statements 对象的个数 -->
<property name="maxStatementsPerConnection">5</property> <!-- he's important, but there's only one of him --> </named-config>
</c3p0-config>

      3.编写utils工具类

 import java.sql.Connection;
import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JdbcUtils { /**
* 释放链接
* @param connection
*/
public static void releaseConnection(Connection connection){
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} private static ComboPooledDataSource dataSource=null; static{
//只被创建一次
dataSource=new ComboPooledDataSource("myc3p0"); // myc3p0 一定要与配置文件中的名字一样
} /**
* 返回数据源的一个Connection 对象
* @return
* @throws Exception
*/
public static Connection getConnection() throws Exception{
return dataSource.getConnection();
}
}

  以上是我今天学到的关于c3p0的一些知识,今后在学习的过程中慢慢摸索,逐渐补充。

    

    

  

最新文章

  1. 1、NoSQL概述
  2. Apworks框架实战(二):开始使用
  3. float 的有效数字为七位是怎么得出来的
  4. 编译安装apache下添加mod_rewrite支持
  5. UVa 11168 (凸包+点到直线距离) Airport
  6. Map 对象
  7. 06_关于SqlSession
  8. MarkDown基础使用教程-by sixleaves
  9. Cube Stacking(并差集深度+结点个数)
  10. JS获得URL参数
  11. 兼容的网页宽度margin padding
  12. 利用formatter原理自动化参数化查询
  13. Spring Boot简单xml配置集成mybatis
  14. bzoj:1941: [Sdoi2010]Hide and Seek
  15. java基础知识总结一:
  16. Problem B: STL——集合运算
  17. Java环境变量PATH和CLASSPATH
  18. python中的集合
  19. How does exercise keep your brain young?
  20. IE 浏览器旧版本下载

热门文章

  1. 在cad中画一条长500mm,垂直90度的线段
  2. mysql查询语句理解
  3. java学习之三种常用设计模式
  4. poj1833---字典序算法
  5. canvas学习笔记(一)-认识canvas
  6. BadUSB的防范研究
  7. FilenameUtils工具类
  8. MailBee的简单使用
  9. BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )
  10. SGU 248. Integer Linear Programming( 背包dp )