Java--数据库连接池
在我们使用数据库时,每次都需要获取数据库链接,而创建连接通常需要消耗较大的资源。对于一个很小的应用是没有什么问题,如果是一个复杂的数据库应用呢?是不是要很大的开销?如果我们去减少创建、关闭连接就会很好的降低资源消耗提升性能,于是就有了数据库连接池的出现。(注:本博客主要使用mysql数据库)
不使用连接池
需要mysql-connector-java-5.0.8-bin.jar1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50package com.xiaoxiaomo.pool;
import java.sql.*;
import java.util.ResourceBundle;
/**
* 不使用连接池
* JDBC DEMO
* Created by xiaoxiaomo on 2016/4/26.
*/
public class UnPool {
public static void main(String[] args) {
// 创建连接
Connection conn = null;
PreparedStatement statm = null;
ResultSet rs = null;
try {
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql:///xiaoxiaomo?useUnicode=true&characterEncoding=UTF-8",
"root", "root");
String sql = "update sys_user set mobile= ? where id = ?";
statm = conn.prepareStatement(sql) ;
statm.setString(1,"15826008888");
statm.setInt(2,2);
int b = statm.executeUpdate() ;
if (b == 1) {
System.out.println("更新成功");
}
} catch (Exception e) {
System.out.println("插入失败");
e.printStackTrace();
} finally {
// 关闭连接 释放资源
try {
if (rs != null)
rs.close();
if (statm != null)
statm.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
常用数据库连接池
数据库连接池的一些优点:
- 资源重用
- 更快的系统响应速度
- 新的资源分配手段
- 统一的连接管理,避免数据库连接泄漏
现在很多WEB服务器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。
DBCP数据源
- DBCP 是 Apache 软件基金组织下的开源连接池实现,使用DBCP,需要如下两个 jar 文件(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar):
- Tomcat 的连接池也是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。
- 实例代码:注这里使用了配置文件,具体配置如下:
1 | package com.xiaoxiaomo.pool.dbcp; |
C3P0
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。C3P0数据源在项目开发中使用得比较多。
- c3p0与dbcp区别
dbcp没有自动回收空闲连接的功能
c3p0有自动回收空闲连接功能 - 需要导入jar:c3p0-0.9.5.1.jar和mchange-commons-java-0.2.10.jar
- 在类目录下加入C3P0的配置文件:c3p0-config.xml
1 | package com.xiaoxiaomo.pool.c3p0; |
jdbcUtils
commons-dbutils
是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
- org.apache.commons.dbutils.QueryRunner –核心
- org.apache.commons.dbutils.ResultSetHandler –工具类
rg.apache.commons.dbutils.DbUtils
实例代码:
1 | package com.xiaoxiaomo.pool.dbutil; |