JavaWeb学习过程 之c3p0的使用

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

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

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

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

二、什么是数据库连接池

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

  

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

  

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

三、使用C3P0 数据库连接池

  C3P0有两种连接方式。

  1.第一种:

    具体步骤:

      1.导入所需jar包

      2.java代码

      

 1 import java.beans.PropertyVetoException;
 2 import java.sql.Connection;
 3 import java.sql.SQLException;
 4
 5 import com.mchange.v2.c3p0.ComboPooledDataSource;
 6
 7
 8 public class JDBCUtils {
 9     private static Connection conn=null;
10     private static ComboPooledDataSource comboPooledDataSource=new ComboPooledDataSource();
11
12     public static Connection getConnection(){
13         try {
14             comboPooledDataSource.setDriverClass("com.microsoft.sqlserver.jdbc.SQLServerDriver");
15             comboPooledDataSource.setJdbcUrl("jdbc:sqlserver://localhost:1433;databasename=mysql");
16             comboPooledDataSource.setUser("sa");
17             comboPooledDataSource.setPassword("1546873");
18
19             comboPooledDataSource.setAcquireIncrement(5);// 可以设置连接池的各种属性
20
21             conn=comboPooledDataSource.getConnection();
22         } catch (PropertyVetoException e) {
23             // TODO Auto-generated catch block
24             e.printStackTrace();
25         } catch (SQLException e) {
26             // TODO Auto-generated catch block
27             e.printStackTrace();
28         }
29         return conn;
30     }
31
32 }

  2.第二种:

    具体步骤:

      1.导入jar包

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

      代码如下

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

      3.编写utils工具类

 1 import java.sql.Connection;
 2 import java.sql.SQLException;
 3
 4 import com.mchange.v2.c3p0.ComboPooledDataSource;
 5
 6 public class JdbcUtils {
 7
 8     /**
 9      * 释放链接
10      * @param connection
11      */
12     public static void releaseConnection(Connection connection){
13         if(connection!=null){
14             try {
15                 connection.close();
16             } catch (SQLException e) {
17                 // TODO Auto-generated catch block
18                 e.printStackTrace();
19             }
20         }
21     }
22
23
24     private static ComboPooledDataSource dataSource=null;
25
26     static{
27         //只被创建一次
28         dataSource=new ComboPooledDataSource("myc3p0");  // myc3p0 一定要与配置文件中的名字一样
29     }
30
31     /**
32      * 返回数据源的一个Connection 对象
33      * @return
34      * @throws Exception
35      */
36     public static Connection getConnection() throws Exception{
37         return dataSource.getConnection();
38     }
39 }

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

    

    

  

时间: 2024-10-26 10:10:52

JavaWeb学习过程 之c3p0的使用的相关文章

JavaWeb学习过程 之MVC模式下的查询

近些天一直在学习javaweb 但总是时断时续,今天终于有时间,来学习一下MVC下的查询模式. 一.首先先了解一下 什么是mvc? MVC是Model-View-Controller的简称,即模型-视图-控制器.它是一种设计模式,它吧应用程序分成三个核心模块,模型,视图,控制器.他们各自处理自己的任务. 模型:是应用程序的主体部分,模型指的是业务模型. 一个模型可以为多个视图提供数据. 视图:是用户看到的并与之交互的界面. 可以向用户显示相关的数据,接受用户的输入,但是它不进行任何实际的业务处理

JavaWeb 后端 &lt;十&gt; 之 数据池 C3P0 DPCB JNDI

一.数据库连接池原理:(理解) //模拟数据库连接池的原理 public class ConnectionPoolDemo { private static List<Connection> pool = new ArrayList<Connection>(); static{ try { for(int i=0;i<10;i++){ Connection conn = JdbcUtil.getConnection();//创建的新连接 pool.add(conn); } }

【JavaWeb】c3p0连接池与MySQL

正文之前 在之前的文章讲到了传统的JDBC连接MySQL的方式,但是这样的方式在进行多个连接时,就显得效率低下,明显不如连接池的效率,所以我们这次来讲解一下JDBC连接池之一:c3p0 正文 1. 准备工作 IntelliJ IDEA c3p0-0.9.5.2(jar) MySQL 2. 配置 c3p0-config.xml default-config 在配置之前,需要先进行建立数据库的工作,本文还是采用上篇文章中的名为 customer 的数据库 然后在工程的 src 目录下新建一个名为 c

javaweb笔记全套

Lesson 1 一.eclipse工具的使用 1. java代码的位置 1) 选择工作空间 workspace  选择一个文件夹存放程序(代码) 不要用中文和空格 2) 新建一个java 工程(Project) 3) 建包 建类 2. 快捷键 alt + / : 代码自动补齐,需要配置的 打开preferences(首选项), 搜keys,打开快捷键配置面板 搜 alt+/ ,取消绑定 搜 content assist ,取消原先的绑定,配置成alt+/ ctrl+1: 错误自动修复, 注意,

[手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路

来源于:http://www.jianshu.com/p/5124eef40bf0 [手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路 手把手教你整合最优雅SSM框架:SpringMVC + Spring + MyBatis 前面网友说我为啥很久不更新博客了,我告诉他们我准备潜修.其实是我的博客被人批评是在记流水账(~一脸尴尬~). 再次安利一波,博客地址:acheng1314.cn 本文中的图片用了个人服务器存储,网速较慢,各位老司机耐心等待. 工具 IDE为id

[Java面试三]JavaWeb基础知识总结.

1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. • 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同. l 静态web资源开发技术 • Html l 常用动态web资源开发技术: • JSP/Servlet.ASP

[原创]java WEB学习笔记80:Hibernate学习之路--- hibernate配置文件:JDBC 连接属性,C3P0 数据库连接池属性等

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

javaweb项目-医者天下 (Spring+SpringMVC+MyBatis)

项目下载地址:http://download.csdn.net/detail/qq_33599520/9826683 项目完整结构图: 项目简介: 医者天下项目是一个基于Spring+SpringMVC+MyBatis的javaweb项目,采用的是Mysql作为数据库,内部结构主要为注解方式,代码详细配有注释,项目完整度百分之95以上,有些小瑕疵未能处理,所以,此代码仅供参考使用,产生的任何漏洞和我无关. 项目代码贴出的顺序严格按照我搭建项目的顺序贴出代码,以保证代码的完整性和可用性. 项目结构

c3p0 泄漏

一个很重要的资料来源 http://liu.fm/2015/07/15/c3p0/ c3p0 泄漏 2011-06-16 16:53 2660人阅读 评论(0) 收藏 举报 分类: JAVA(120) 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近的项目碰到了连接泄漏的问题. 项目用的是Spring + Hibernate + c3p0,具体表现为,系统运行一段时间后,用户打开登录页后,执行登录无响应,查看后台日志,提示Could not open Connection.将c3p0日