Java连接池的实现.docx

上传人:b****5 文档编号:2858071 上传时间:2022-11-16 格式:DOCX 页数:11 大小:17.39KB
下载 相关 举报
Java连接池的实现.docx_第1页
第1页 / 共11页
Java连接池的实现.docx_第2页
第2页 / 共11页
Java连接池的实现.docx_第3页
第3页 / 共11页
Java连接池的实现.docx_第4页
第4页 / 共11页
Java连接池的实现.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

Java连接池的实现.docx

《Java连接池的实现.docx》由会员分享,可在线阅读,更多相关《Java连接池的实现.docx(11页珍藏版)》请在冰豆网上搜索。

Java连接池的实现.docx

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;i

53connStack.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(connAmount

83conn=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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1