Java连接池的实现.docx
《Java连接池的实现.docx》由会员分享,可在线阅读,更多相关《Java连接池的实现.docx(11页珍藏版)》请在冰豆网上搜索。
![Java连接池的实现.docx](https://file1.bdocx.com/fileroot1/2022-11/16/e17cf23f-0c2e-421b-afa6-32d4a2889fe9/e17cf23f-0c2e-421b-afa6-32d4a2889fe91.gif)
Java连接池的实现
连接池的实现
陌生知识掌握
栈(stack):
下面信息来自stack百科
栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表。
栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。
栈是只能在某一端插入和删除的特殊线性表。
用桶堆积物品,先堆进来的压在底下,随后一件一件往堆。
取走时,只能从上面一件一件取。
堆和取都在顶部进行,底部一般是不动的。
栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。
插入一般称为进栈,删除则称为退栈。
栈也称为后进先出表。
(详细内容参考JDK1.5API)
1、思路–构造一个高内聚的连接池类
我们已经学过,并熟练掌握了几种java应用访问关系数据库的技术细节。
现将几种实现简述如下:
a)、jdbc-odbc桥连接
b)、纯jdbc连接
c)、基于属性文件的配置,获取数据源连接对象。
d)、基于容器获取连接池。
(基于tomcat容器)
2、实现的步骤
(1)、建立ConnManagerPool类
(2)、类参数:
a)、定义使用SQLserver2005数据库驱动的连接参数;
b)、定义数据库连接池的保存栈;
(例如:
privateintminConn=0;//最少连接数
privateintmaxConn=10;//最大连接数
privateintconnAmount=0;//当前连接数
privateStackconnStack=newStack();)//保存连接的栈
c)、定义全局共享一个数据库连接类;
(例如:
privatestaticConnManagerPoolinstance;)
(3)、类操作 :
a)、构造方法,初始化自动生成最少数量的连接Connection;
b)、获取全局共享一个数据库连接类实例;
c)、内部使用方法,生成一个数据库连接对象并返回;
d)、通过类对象返回的数据库连接;
e)、释放数据库连接,并压回连接池。
3、代码实现部分
代码实现部分(代码仅供参考,帮助细化思路,不要盲目去记忆代码)
1packagecommon;
2
3importjava.sql.Connection;
4importjava.sql.DriverManager;
5importjava.sql.PreparedStatement;
6importjava.sql.ResultSet;
7importjava.sql.SQLException;
8importjava.sql.Statement;
9importjava.util.Stack;
10
11/*
12*驱动:
MicrosoftSQLServer2005的驱动
13*需放在本web工程的lib中
14*
15*使用说明:
使用本类请不要NewConnManagerPool;
16*要获得本类的对象请使用函数getInstance();
17*实例:
ConnManagerPoolconn;
18*conn=ConnManagerPool.getInstance();
19*/
20publicclassConnManagerPool{
21
22/*
23*使用SQLserver2005数据库驱动的连接参数
24*/
25finalStringdriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
26finalStringurl="jdbc:
sqlserver:
//localhost:
1433;DatabaseName=MarketManager";
27finalStringuser="sa";
28finalStringpassword="sa";
29
30/*
31*数据库连接池的保存栈
32*/
33privateintminConn=0;
34privateintmaxConn=10;
35privateintconnAmount=0;
36privateStackconnStack=newStack();
37
38/*
39*全局共享一个数据库连接类
40*/
41privatestaticConnManagerPoolinstance;
42publicstaticConnManagerPoolgetInstance(){
43if(instance==null)
44instance=newConnManagerPool();
45returninstance;
46}
47
48/*
49*构造函数:
初始化自动生成最少数量的连接Connection;
50*/
51publicConnManagerPool(){
52for(inti=0;i53connStack.push(newConnection());
54}
55
56/*
57*功能:
内部使用,生成一个数据库连接并返回
58*ifsuccessreturndefaultconnection,failedreturnnull;
59*/
60publicConnectionnewConnection(){
61Connectionconn=null;
62try{
63Class.forName(driver);
64conn=DriverManager.getConnection(url,user,password);
65connAmount++;
66}catch(ClassNotFoundExceptione){
67conn=null;
68}catch(SQLExceptione){
69conn=null;
70}
71returnconn;
72}
73
74/*
75*功能:
通过类对象返回的数据库连接
76*ifsuccessreturndefaultconnection,failedreturnnull;
77*/
78publicConnectiongetConnection(){
79Connectionconn=null;
80if(!
connStack.isEmpty()){
81conn=connStack.pop();
82}elseif(connAmount83conn=newConnection();
84}else{
85try{
86wait(100000);
87returngetConnection();
88}catch(InterruptedExceptione){
89conn=null;
90}
91}
92returnconn;
93}
94
95/*
96*功能:
释放数据库连接,并压回连接池
97*/
98publicvoidfreeConnection(Connectionconn){
99try{
100if(conn!
=null)
101{
102connStack.push(conn);
103notifyAll();
104}
105}catch(Exceptione){
106
107}
108}
109
110/*
111*功能:
Statement,通过类名调用
112*ifsuccessreturnaStatement,failedreturnnull;
113*/
114publicStatementgetStatement(Connectionconn){
115Statementstmt=null;
116try{
117if(conn!
=null){
118stmt=conn.createStatement();
119}
120}catch(SQLExceptione){
121stmt=null;
122
123}
124returnstmt;
125}
126
127/*
128*功能:
PreparedStatement,通过类名调用
129*ifsuccessreturnaPreparedStatement,failedreturnnull;
130*/
131publicPreparedStatementgetPreparedStatement(Connectionconn,Stringsql){
132PreparedStatementpstmt=null;
133try{
134if(conn!
=null){
135pstmt=conn.prepareStatement(sql);
136}
137}catch(SQLExceptione){
138pstmt=null;
139}
140returnpstmt;
141}
142
143/*
144*功能:
通过SQL语句,返回结果集,通过类名调用
145*ifsuccessreturndataofdatabase,failedreturnnull;
146*/
147publicResultSetexecuteQuery(Statementstmt,Stringsql){
148ResultSetrs=null;
149try{
150if(stmt!
=null){
151rs=stmt.executeQuery(sql);
152}
153}catch(SQLExceptione){
154rs=null;
155}
156returnrs;
157}
158
159publicResultSetexecuteQuery(PreparedStatementpstmt){
160ResultSetrs=null;
161try{
162if(pstmt!
=null){
163rs=pstmt.executeQuery();
164}
165}catch(SQLExceptione){
166rs=null;
167}
168returnrs;
169}
170