Java使用独立数据库连接池(DBCP为例)
于是数据连接池技术便产生了,其原理就是在数据请求方和数据库之间建立一个数据库连接管理层。在系统启动的时候就分配一定数量的连接,并维护这些连接,保持最低数量的连接数。同时为了保护数据库和系统,设置一个最大连接数,缓解数据库的访问压力。
这样在每次数据请求方需要连接时,管理器便分配一个连接给数据请求方,数据请求方使用完连接后,将连接归还给管理器,这样就尽可能的减少不必要的数据库连接消耗。
在Java的数据库服务JDBC中并没有提供一个实际ConnectionPool实现,但是留出了接口以支持第三方服务提供商,我觉得其中最重要的接口是DataSource。
实际上Java访问数据库的方式主要有四种:
一、使用DriverMananger来直接编程实现,这种是最基本的方式。
DriverMananger实现数据库连接的关键步骤为:
1>Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
2>Connection conn = null;
3>conn = DriverManager.getConnection(url, "name", "password");
二、使用服务器配置文件来实现连接池。
一些服务器提供了自己的数据库连接池服务,例如Tomcat服务器就提供了由commons-DBCP支持的数据池连接服务,只需要在context.xml中填写相应的数值就可以了。
三、配置文件配置 datasource
DataSource是在JavaAPI中提供的一个接口,第三方服务在实现了DataSource之后,例如DBCP的BasicDataSource,为了提高数据库连接池的可配置性,便利用IOC模式(控制反转),将实际的Bean与配置数据分开,配置数据放在配置文件中(一般使用XML)。来实现对多个数据库的控制。
而在DataSource对象实例化之后,通过DataSource.getConnection()就可以得到连接了。
四、通过配置jdbc-odbc连接桥
听说过,没有使用过,没有发言权。
在这里使用Apache提供的commons-DBCP来实现一个独立的简单的数据库连接池。
首先需要三个工具包:commons-pool.jar,commons-collection.jar,commons-DBCP.jar。
关键实现代码段见下:
- //持有一个静态的数据库连接池对象
- private static DataSource DS;
- //使用DBCP提供的BasicDataSource实现DataSource接口
- public static void initDataSource(String connectURI, String username,
- String password, String driverClass, int initialSize,
- int maxActive, int maxIdle, int maxWait) {
- BasicDataSource ds = new BasicDataSource();
- ds.setDriverClassName(driverClass);
- ds.setUsername(username);
- ds.setPassword(password);
- ds.setUrl(connectURI);
- ds.setInitialSize(initialSize);
- ds.setMaxActive(maxActive);
- ds.setMaxIdle(maxIdle);
- ds.setMaxWait(maxWait);
- DS = ds;
- }
- //获得一个数据库连接
- public Connection getConnection() {
- Connection con = null;
- if (DS != null) {
- try {
- con = DS.getConnection();
- } catch (Exception e) {
- System.out.println(e.getMessage()); }
- //将数据库连接的事物设置为不默认为自动Commit
- try {
- con.setAutoCommit(false);
- } catch (SQLException e) {
- System.out.println(e.getMessage()); }
- return con;
- }
- //回收数据库连接时,直接使用con.close()即可
- return con;
- }
- //回收数据库连接
- protected static void shutdownDataSource() throws SQLException {
- BasicDataSource bds = (BasicDataSource) DS;
- bds.close();
- }
上面的代码都是从实际使用的代码抽取出来的,希望可以帮助大家。
目前,OpenSource中提供了很多的数据库连接池技术,使用的流程和模式,都与上面的代码大同小异。同时最新发布的BoneCP我还从来没有感受过,希望有朋友与我分享一下使用经验。
- commons-collections-3.2.1.jar (561.9 KB)
- 下载次数: 73
- commons-pool-1.5.5.jar (97.8 KB)
- 下载次数: 55
- commons-dbcp-1.4.jar (156.8 KB)
- 下载次数: 59
Java使用独立数据库连接池(DBCP为例)的更多相关文章
- [数据库连接池] Java数据库连接池--DBCP浅析.
前言对于数据库连接池, 想必大家都已经不再陌生, 这里仅仅设计Java中的两个常用数据库连接池: DBCP和C3P0(后续会更新). 一. 为何要使用数据库连接池假设网站一天有很大的访问量,数据库服务 ...
- java常用数据库连接池 (DBCP、c3p0、Druid) 配置说明
1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...
- 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明
1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...
- DataSource - 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明
1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...
- 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明.RP
1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...
- 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明(转)
1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...
- java数据库连接池dbcp的使用
近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开发模式 ...
- java之数据库连接池-dbcp&c3p0&dbutils
介绍 因为数据库连接对象的创建比较消耗性能,所以可以在应用程序启动时就在内存中开辟一片空间(集合)存放多个数据库连接对象,后面需要连接时直接从该空间中取而不用新创建:使用完毕后归还连接(将连接重新放回 ...
- Java数据库连接池--DBCP浅析.
一. 为何要使用数据库连接池假设网站一天有很大的访问量,数据库服务器就需要为每次连接创建一次数据库连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出.拓机.数据库连接是一种关键的有限的昂贵 ...
随机推荐
- 微信公众号用户OpenID同步导出系统
一.简介 同步公众账号用户信息,包括OpenID.昵称.头像.地区等. 二.主要功能 同步公众账号用户 OpenID,以及昵称.头像.性别.地区.关注时间等,支持认证订阅号.认证服务号. 支持超过1万 ...
- [整] Android ListView 去除边缘阴影、选中色、拖动背景色等
以下是通过XML定义的方式实现,如果需要通过代码实现,找到对应是set方式设置即可. 去除ListView滑到顶部和底部时边缘的黑色阴影: android:fadingEdge="none& ...
- JavaScript编写风格指南 (一)
//参考<编写可维护的Javascript> 一:缩进// 第一行的层级由4个空格组成,避免使用制表符tab进行缩进 //好的写法if (true) { doSomething() ...
- django错误笔记——1242 Subquery returns more than 1 row
在数据库查询操作过程中,子查询结果不唯一,导致外面的查询无法进行. 我的错误语句: rid = models.User.objects.filter(username=username).values ...
- AtomicInteger源码
一.概念 AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而Ato ...
- 【Python】如何基于Python写一个TCP反向连接后门
首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...
- Canvas 3D球形文字云动画特效
Canvas 3D球形文字云动画特效 效果图: 代码如下,复制即可使用: (适用浏览器:360.FireFox.Chrome.Opera.傲游.搜狗.世界之窗. 不支持Safari.IE8及以下浏览器 ...
- CentOS 安装codeblocks
1. 安装wxWidgets .tar.bz2 [root@luozhonghua codeblocks]# cd wxWidgets- [root@luozhonghua wxWidgets-]# ...
- Fiddler 常用功能总结
1.fiddler相关配置 2.如何抓包 移动端 ①保持手机和电脑处于同一网络中 ②设置手机的代理为电脑当前所处网络的IP,端口号为:8888,eg:10.12.1.64:8888. ③ 启动ap ...
- Java第三阶段学习(十三、会话技术、Cookie技术与Session技术)
一.会话技术 1. 存储客户端状态 会话技术是帮助服务器记住客户端状态(区分客户端)的. 2. 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话.会话技术就是记录这 ...