在JDBC中,获得连接或释放资源是非常消耗系统资源的两个过程,为了解决此类性能问题,通常采用连接池技术,来共享连接。这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池。

用池的概念来管理Connection,这样可以重复使用Connection。有了连接池以后就不用自己亲自创建连接而是通过连接池来获得Connection对象。当使用完Connection之后,调用Connection的close()方法不是真的将连接关闭,而是把Connection归还给连接池。连接池就可以继续保留这个Connection给其他用户使用了。

Java为了数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池来实现这个接口,这样应用程序可以方便的切换不同厂商的连接池。有三个常用的连接池:DBCP、C3P0和druid

DBCP连接池

DBCP是一个开源的连接池,是Apache Common成员之一,在企业开发中也比较常见,tomcat内置的连接池。

在使用DBCP之前,要引入2个包:commons-dbcp.jar和commons-pool.jar。

 package com.dbcp.demo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource; public class DemoDBCP {
// 连接数据库的参数
public static final String DRIVER = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/mybatis";
public static final String USERNAME = "root";
public static final String PASSWORD = ""; // 创建连接池
public static BasicDataSource dataSource = new BasicDataSource(); // 静态代码块
static {
// 对连接池对象进行基本的配置
dataSource.setDriverClassName(DRIVER); // 待连接的数据库的驱动
dataSource.setUrl(URL); // 指定要连接的数据库的地址
dataSource.setUsername(USERNAME); // 指定要连接的用户名
dataSource.setPassword(PASSWORD); // 指定要连接数据库的密码 // 这里应该还有设置连接数的语句
} // 返回连接池对象
public static DataSource getDataSource() {
return dataSource;
} // 测试连接池
public static void main(String[] args) throws SQLException {
// 获得连接池
DataSource dataSource = DemoDBCP.getDataSource();
// 从连接池中获得连接
Connection conn = dataSource.getConnection();
// 准备sql语句
String sql = "insert into person (LastName, FirstName, Address, Age) values" +
" (?, ? ,?, ?)";
// 获得PresparedStatement对象
PreparedStatement pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setString(1, "张");
pstmt.setString(2, "三");
pstmt.setString(3, "埃塞俄比亚");
pstmt.setInt(4, 24);
// 执行CRUD操作
pstmt.execute();
// 关闭连接
conn.close();
}
}

DBCP常见的配置选项

必须的配置项
driverclassName 数据库驱动名称
url 数据库的地址
username 用户名
password 密码
基本项
maxActive 最大连接数
initialSize 连接池中初始化多少个Connection连接对象
扩展项
maxWait 超时等待时间以毫秒为单位

JDBC数据库连接池技术的更多相关文章

  1. 基于JDBC的数据库连接池技术研究与应用

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

  2. .数据库连接池技术:DBCP和C3P0

    数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...

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

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

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

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

  5. JDBC 数据库连接池

    http://www.cnblogs.com/lihuiyy/archive/2012/02/14/2351768.html JDBC 数据库连接池 小结   当对数据库的访问不是很频繁时,可以在每次 ...

  6. java数据库连接池技术简单使用

    JDBCDemo.java: package com.itheima.jdbc; import java.sql.Connection; import java.sql.PreparedStateme ...

  7. java攻城狮之路--复习JDBC(数据库连接池 : C3P0、DBCP)

    复习数据库连接池 : C3P0.DBCP 1.数据库连接池技术的优点: •资源重用:      由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销.在减少系统消耗的基础上,另一方面也增 ...

  8. Java学习:数据库连接池技术

    本节内容 数据库连接池 Spring JDBC : JDBC Template 数据库连接池 1.概念:其实就是一个容器(集合),存放数据库连接的容器 当系统初始化好后,容器中会申请一些连接对象,当用 ...

  9. JAVA之JDBC数据库连接池总结篇

    JDBC数据库连接池 一.JDBC数据库连接池的必要性 二.数据库连接池技术 三.多种开源的数据库连接池 3.1 C3P0数据库连接池 3.2 DBCP数据库连接池 3.3 Druid(德鲁伊)数据库 ...

随机推荐

  1. MVC中自带的异步((Ajax.BeginForm)无效

    1.确定unobtrusive-ajax已经引用,VS2012带,2013不带 2.注意jq和unobtrusive-ajax引用顺序问题,确保jq在前 3.注意JQ和unobtrusive-ajax ...

  2. could not deduce template argument for 'const std::_Tree<_Traits> &' from 'const std::string'

    VS2008, 写一个简单的demo的时候出现了这个: 1>------ Build started: Project: GetExportTable, Configuration: Relea ...

  3. 分析App应用市场, App应用有哪些类型

    随着移动互联网的流行,APP应用也是异常火爆,App应用市场就如破冰的泉水在我们的生活中到处渗透,对于App开发的的状况来分析,企业在寻找技术人员开发一款专业的App软件的时候,必须先了解用户的需求与 ...

  4. MongoDB安装及入门

    下载 windows下的是3.2的版本 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/ mongodb采用27 ...

  5. chattr的常用参数详解

    chattr的常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际生产环境中,有的运维工程师不得不和开发和测试打交道,在我们公司最常见的就是部署接口.每天每个人部署的 ...

  6. C# GMap下提供一个高德地图

    using System; using GMap.NET.Internals; using GMap.NET.Projections; namespace GMap.NET.MapProviders ...

  7. jQuery之元素的遍历与元素的过滤

    jQuery遍历之向下遍历 jQuery遍历之向上遍历 jQuery遍历之同级遍历 jQuery遍历之过滤

  8. Yii2中多表关联查询(join、joinwith)

    我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order      (id  order_name ...

  9. 无光驱在32位windows系统下安装64位windows系统

    位的系统. 大家都知道,32位的操作系统最多只能支持3.2G的内存,现在内存白菜价,很多人都在原有基础上购入新内存,这样最少也有4G了,为了让内存不浪费,我 们只有升级到64位操作系统.但是很多朋友又 ...

  10. 通过shell命令编辑xml文件--sed工具

    1.修改如下xml文件的value值: