JDBC数据库连接池技术
在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数据库连接池技术的更多相关文章
- 基于JDBC的数据库连接池技术研究与应用
引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开 ...
- .数据库连接池技术:DBCP和C3P0
数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...
- Java jdbc数据库连接池总结!(转)
1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的 ...
- 【Java】数据库连接池技术
JDBC的问题 在程序中,我们经常要建立与数据库的连接,之后再关闭这个连接.我们知道,数据库连接对象的创建是比较消耗系统性能的,这些频繁的操作势必会消耗大量的系统资源.因此我们需要采用更高效的数据库访 ...
- JDBC 数据库连接池
http://www.cnblogs.com/lihuiyy/archive/2012/02/14/2351768.html JDBC 数据库连接池 小结 当对数据库的访问不是很频繁时,可以在每次 ...
- java数据库连接池技术简单使用
JDBCDemo.java: package com.itheima.jdbc; import java.sql.Connection; import java.sql.PreparedStateme ...
- java攻城狮之路--复习JDBC(数据库连接池 : C3P0、DBCP)
复习数据库连接池 : C3P0.DBCP 1.数据库连接池技术的优点: •资源重用: 由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销.在减少系统消耗的基础上,另一方面也增 ...
- Java学习:数据库连接池技术
本节内容 数据库连接池 Spring JDBC : JDBC Template 数据库连接池 1.概念:其实就是一个容器(集合),存放数据库连接的容器 当系统初始化好后,容器中会申请一些连接对象,当用 ...
- JAVA之JDBC数据库连接池总结篇
JDBC数据库连接池 一.JDBC数据库连接池的必要性 二.数据库连接池技术 三.多种开源的数据库连接池 3.1 C3P0数据库连接池 3.2 DBCP数据库连接池 3.3 Druid(德鲁伊)数据库 ...
随机推荐
- 通过pustil模块取pid及对应的pidname
通过pustil模块取pid及对应的pidname import psutil import json def getpid(): reslut = psutil.pids() return resl ...
- 使用WKWebView遇到的坑
苹果从iOS8开始推出了WKWebView,大有替换UIWebView的意思(尽管Xcode中还没给UIWebView标记过期版本),所以决定将项目进行适配,iOS8及以上版本,改用WKWebView ...
- Windows Server 2008 R2 域控服务器运行nslookup命令默认服务器显示 UnKnown
一.问题: 域控服务器DOS窗口运行nslookup命令提示如下: 二.原因分析: 主要原因在于域控服务器的DNS服务器没有设置反向查找区域,计算机名称是通过IP地址反向查找到域控服务器的计算机名称. ...
- duilib各种布局的作用,相对布局与绝对布局的的意义与用法
大多数刚使用duilib的朋友时候非常依赖duilib自带的设计器,用他可以拖拉控件,可视化的做出自己想要的界面.可是用一段时间就会发现原带的设计器有很多bug,时不时会崩溃,支持的控件数量有限,属性 ...
- [Android Tips] 22. Available Java 7 Features in Android
This only allows Java 7 language features, and you can hardly benefit from anything since a half of ...
- C语言的概述--学习c的第二天
以下是整理的知识点: #include <stdio.h>/* 引入stdio.h文件c的标准函数库 */ int main(void)/* 定义一个函数main(),int定义函数返回的 ...
- Swift 写纯洁的TableviewCell
let initIdentifier = "员工" var cell = tableView.dequeueReusableCell(withIdentifier: initIde ...
- HandlerMapping的3种访问形式
1.根据BeanName访问Controller 2.根据简单URL访问 3.根据Controller类名访问
- url传参中文乱码
当使用url重定向传参的时候,比如: javascript:window.location.href='modifyBook.jsp?BName=<%=URLEncoder.encode(&qu ...
- android nfc中MifareClassic格式的读写
Android支持的数据格式 数据格式的Intent filter AndroidManifest.xml文件中,要像向下列示例那样,在<activity>元素内的<meta-dat ...