Java实现数据库连接池的代码.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 package com.kyo.connection;
2
3 import java.sql.Connection;
4 import java.sql.DatabaseMetaData;
5 import java.sql.Driver;
6 import java.sql.DriverManager;
7 import java.sql.SQLException;
8 import java.sql.Statement;
9 import java.util.Enumeration;
10 import java.util.Vector;
11
12 public class ConnectionPool {
13
14 private ConnectionParam param;
15
16 private String testTable = ""; // 测试连接是否可用的测试表名,默认没
有测试表
17
18 private Vector connections = null; // 存放连接池中数据库连接的向量 , 初始时为
19 // null,它中存放的对象为PooledConnection 型
20
21 public void setParam(ConnectionParam param {
22 this.param = param;
23 }
24
25 public ConnectionParam getParam( {
26 return param;
27 }
28
29 /**
30 * 构造函数
31 *
32 * @param param
33 */
34 public ConnectionPool(ConnectionParam param {
35 this.param = param;
36 }
37
38 /**
39 *
40 * 获取测试数据库表的名字
41 *
42 * @return 测试数据库表的名字
43 */
44
45 public String getTestTable( {
46 return this.testTable;
47 }
48
49 /**
50 *
51 * 设置测试表的名字
52 *
53 * @param testTable
54 * String 测试表的名字
55 */
56
57 public void setTestTable(String testTable {
58 this.testTable = testTable;
59 }
60
61 /**
62 * 创建一个数据库连接池,连接池中的可用连接的数量采用类成员initialConnections 中设置的值
63 */
64
65 public synchronized void createPool( throws Exception {
66
67 // 确保连接池没有创建
68 // 如果连接池己经创建了,保存连接的向量 connections 不会为空
69 if (connections != null {
70 return; // 如果己经创建,则返回
71 }
72
73 // 实例化 JDBC Driver 中指定的驱动类实例
74 Driver driver = (Driver (Class.forName(this.param.getDriver(
75 .newInstance(;
76 DriverManager.registerDriver(driver; // 注册 JDBC 驱动程序
77 // 创建保存连接的向量 , 初始时有 0 个元素
78 connections = new Vector(;
79
80 // 根据 initialConnections 中设置的值,创建连接。
81 createConnections(this.param.getMinConnection(;
82 System.out.println(" 数据库连接池创建成功! ";
83
84 }
85
86 /**
87 *
88 * 创建由 numConnections 指定数目的数据库连接 , 并把这些连接放入connections 向量中
89 *
90 * @param numConnections
91 * 要创建的数据库连接的数目
92 */
93
94 private void createConnections(int numConnections throws SQLException {
95
96 // 循环创建指定数目的数据库连接
97 for (int x = 0; x < numConnections; x++ {
98 // 是否连接池中的数据库连接的数量己经达到最大?最大值由类成员maxConnections,指出,如果 maxConnections
99 // 为 0 或负数,表示连接数量没有限制。
100 // 如果连接数己经达到最大,即退出。
101
102 if (this.param.getMaxConnection( > 0
103 && this.connections.size( >= this.param.getMaxConnection( { 104 break;