一、数据库连接池

  1、连接池概念

    连接池其实就是一个容器(集合),存放数据库连接的容器。

    当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问之后,会将连接对象归还给容器

  2、连接池好处

    ① 节约资源(不必没连接一次数据都去创建一个 Connection 对象)

    ② 用户访问高效(每次连接只需要从数据库连接池中获取连接即可,不用等待连接数据库的漫长过程)

  3、实现

    (1)标准接口:DataSource  在 javax.sql 包下

        常用方法

获取连接:getConnection()
归还连接:Connection.close()。如果连接对象

       Connection 是从连接池中获取的,那么调用 Connection.close() 方法,则不会再关闭连接了,而是归还连接。

    (2)接口的实现,一般不需要我们去实现,有数据库厂商来实现

      ① C3P0:数据库连接池技术

      ② Druid:数据库连接池技术,由阿里巴巴提供

二、C3P0 连接池

  1、C3P0 数据库连接池技术实现步骤

1. 导入jar包 (两个) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar (注意:因为是连接数据库,不要忘记导入数据库驱动 jar 包)
2. 定义配置文件:
名称:c3p0.properties 或 c3p0-config.xml(名字必须为这两个中一个,因为会自动加载配置文件)
路径:直接将文件放置 src 目录下即可。
3. 创建核心对象 数据库连接池对象 ComboPooledDataSource
4. 获取连接:getConnection()

    代码实现

 public static void main(String[] args) throws SQLException {
// 创建数据库连接对象
DataSource ds = new ComboPooledDataSource(); // 会自动去加载配置文件 //获取连接对象
Connection conn = ds.getConnection(); // 打印连接对象
System.out.println(conn); // 归还对象
conn.close();
}

  2、导入的 jar 包

    

  3、配置文件

    c3p0-config.xml 配置文件

 <c3p0-config>
<!-- 使用默认的配置读取连接池对象 -->
<default-config>
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/bookstore</property>
<property name="user">root</property>
<property name="password">root</property> <!-- 连接池参数 -->
<!--初始化连接的数量-->
<property name="initialPoolSize">5</property>
<!--最大的连接数量-->
<property name="maxPoolSize">10</property>
<!--超时时间-->
<property name="checkoutTimeout">3000</property>
</default-config> <!--通过指定的名字来获取连接的数据库-->
<named-config name="otherc3p0">
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/bookstore</property>
<property name="user">root</property>
<property name="password">root</property> <!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">8</property>
<property name="checkoutTimeout">1000</property>
</named-config>
</c3p0-config>

    注意:在配置文件中可以连接多个不同的数据库,用<name-config> 声明即可,到时候使用 name 属性来调用即可,如果没有指定 name,那么调用默认的数据库。

     Demo:

 public static void main(String[] args) throws SQLException {
// 创建数据库连接对象
//DataSource ds = new ComboPooledDataSource(""); //连接默认的数据库
DataSource ds = new ComboPooledDataSource("otherc3p0"); //连接 name=otherc3p0数据库 //2 获取连接
Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); // 3.归还连接
conn.close(); }

三、Druid 连接池

  1、Druid 数据库连接池技术实现步骤

1. 导入 jar 包druid-1.0.9.jar
2. 定义配置文件
名称:是properties 形式的,需要手动加载
路径:可以放在任意目录下(建议放在src目录下)
3. 加载配置文件 properties
4. 获取数据连接池对象:通过工厂来获取 DruidDataSourceFactory
5. 获取连接:getConnection
6. 归还连接:close()

    代码实现

 public class DruidDemo1 {
public static void main(String[] args) throws Exception {
//1.导入jar包
//2.定义配置文件 //3.加载配置文件
Properties prop = new Properties();
InputStream is = DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties");
prop.load(is); //4.获取连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(prop); //5.获取连接
Connection conn = ds.getConnection();
System.out.println(conn); // 6.归还连接
conn.close();
}
}

  2、导入 jar 包

      

  3、配置文件

    druid.properties 文件

 driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/bookstore
username=root
password=root
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 延迟时间
maxWait=3000

  4、Druid 连接池的工具类

    可以将数据库连接池封装成一个工具类,这样在获取的连接的时候,直接拿来用即可,不用再创建连接池,更加方便。

 import com.alibaba.druid.pool.DruidDataSourceFactory;

 import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; /**
* Druid 连接池的工具类
*/
public class JDBCUtils { // 1.定义成员变量
private static DataSource ds; static {
//加载配置文件
Properties pro = new Properties();
try {
pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
// 2 获取datasource
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} } /**
* 获取连接
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
} /**
* 释放资源
*/
public static void close(Statement stmt, Connection conn) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} public static void close(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} /**
* 获取连接池方法
*/
public static DataSource getDataSource() {
return ds;
}
}

Java 之 数据库连接池的更多相关文章

  1. java配置数据库连接池的方法步骤

    java配置数据库连接池的方法步骤 java配置数据库连接池的方法步骤,需要的朋友可以参考一下   先来了解下什么是数据库连接池数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vecto ...

  2. Java第三方数据库连接池库-DBCP-C3P0-Tomcat内置连接池

    连接池原理 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”.预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去.我们可以通过设定连接池 ...

  3. Java中数据库连接池原理机制的详细讲解以及项目连接数据库采用JDBC常用的几种连接方式

    连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式 ...

  4. java实现数据库连接池

    package com.kyo.connection; import java.sql.Connection; import java.sql.DatabaseMetaData; import jav ...

  5. Java jdbc数据库连接池总结!(转)

    1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的 ...

  6. 【Java】数据库连接池技术

    JDBC的问题 在程序中,我们经常要建立与数据库的连接,之后再关闭这个连接.我们知道,数据库连接对象的创建是比较消耗系统性能的,这些频繁的操作势必会消耗大量的系统资源.因此我们需要采用更高效的数据库访 ...

  7. java通过数据库连接池链接oracle

    开发工具:Eclipse J2EE 3.6 运行环境:jdk1.6 部署环境:Tomcat7 数据库连接池用的是dbcp,网上download下来的三个jar包. 把数据库连接池包和jdbc的包放到t ...

  8. java常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

    1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...

  9. java之数据库连接池-dbcp&c3p0&dbutils

    介绍 因为数据库连接对象的创建比较消耗性能,所以可以在应用程序启动时就在内存中开辟一片空间(集合)存放多个数据库连接对象,后面需要连接时直接从该空间中取而不用新创建:使用完毕后归还连接(将连接重新放回 ...

  10. Java中数据库连接池原理机制的详细讲解

    连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式 ...

随机推荐

  1. TCP Keepalive笔记

    TCP是无感知的虚拟连接,中间断开两端不会立刻得到通知.一般在使用长连接的环境下,需要心跳保活机制可以勉强感知其存活.业务层面有心跳机制,TCP协议也提供了心跳保活机制. 长连接的环境下,人们一般使用 ...

  2. 各大web服务器https的证书文件

    nginx  key+pem iis pfx+pfx-password.txt tomcat pfx+pfx-password.txt apache key+chain.crt+public.crt

  3. Linux Shell:根据指定的文件列表 或 map配置,进行文件位置转移

    读取配置文件,进行文件位置转移 在whenb.csv中指定了需要从/home/root/cf/下移除到/home/root/cf_wh/下文件列表,whenb.csv中包含记录如下: enb- enb ...

  4. 常见的SQL优化面试题

    1.在表中建立索引,优先考虑where.group by使用到的字段. 2.查询条件中,一定不要使用select *,因为会返回过多无用的字段会降低查询效率.应该使用具体的字段代替*,只返回使用到的字 ...

  5. JS高级:面向对象解析

    1 实例属性/方法 都是绑定在使用构造函数创建出来的对象p上; 最终使用的时候也是使用对象p来进行访问; function Person(name, age, doFunc) { this.name ...

  6. Oracle系列十二 约束

    约束是表级的强制规定有以下五种约束: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK 注意事项 如果不指定约束名 ,Oracle server 自动按照 S ...

  7. ES6新增函数总结和range函数实现

    Array.from  类数组,Set,字符串转为数组 Array.of   不定参数转为数组 Array.prototype.fill(value,[start],[end]) 对数组在指定范围填充 ...

  8. OpenGL基础汇总

    OpenGL(应用程序接口 即API)——用于访问图形硬件的可编程特性 1. 各种矩阵: 世界矩阵(World Matrix):世界矩阵确定一个统一的世界坐标,用于组织独立的物体形成一个完整的场景; ...

  9. Ubuntu安装sysv-rc-conf配置开机启动服务

    ubuntu下chkconfig的替代方案: 第一步:在终端键入sudo apt-get install sysv-rc-conf安装sysv-rc-conf服务. 第二步:检查设置系统开机自启动服务 ...

  10. 【视频开发】Nvidia硬解码总结

    Nvidia硬解码总结 1.前言 本文的主要目的是对近期进行的nvidia硬件解码工作的记录和总结.至于为什么研究nvidia硬件解码的具体内容,其实主要是为了在项目中能够利用nvidia的硬件解码和 ...