jsp中实现连接池(ZT)






在JSP里有两种实现的办法,一种是用JNDI(Java Naming Directory Interface),这可能和应用服务器有关,如果是Resin,先在resin.conf里定义


java 代码
 
  1. <resource-ref>   
  2. <res-ref-name>jdbc/oracle</res-ref-name>   
  3. <res-type>javax.sql.DataSource</res-type>   
  4. <init-param driver-name="oracle.jdbc.driver.OracleDriver"/>   
  5. <init-param url="jdbc:oracle:thin:@192.168.1.1:1521:oracle"/>   
  6. <init-param user="system"/>   
  7. <init-param password="manager"/>   
  8. <init-param max-connections="20"/>   
  9. <init-param max-idle-time="30"/>   
  10. </resource-ref>   
  11. 如果为Tomcat,在Server.xml里面定义,有关的资料可以查文档,然后在jsp里这样用   
  12. try{   
  13. javax.naming.Context env = (Context)new InitialContext().lookup("java:comp/env");   
  14. javax.sql.DataSource pool=(javax.sql.DataSource) env.lookup("jdbc/oracle");   
  15. }catch(Exception e){System.err.println("Exception error:"+e.getMessage());}   
  16.   
  17. try {   
  18. Connection conn = pool.getConnection();   
  19. }catch(Exception e){System.out.println("Exception error:"+e.getMessage());}   
  20. 通过这段代码,你就获得从连接池里获得了一个连接conn。如果想用普通的连接池,那只能用JavaBean了,先写一个ConnectionPool的java的类,然后直接从连接池中获得连接,下面是我一个连接池的JavaBean   
  21. ConnectionPool.java如下:   
  22.   
  23. import java.io.PrintStream;   
  24. import java.sql.Connection;   
  25. import java.util.Vector;   
  26.   
  27. // Referenced classes of package com.ilovejsp.sql:   
  28. // DataSource, PooledConnection   
  29.   
  30. public class ConnectionPool   
  31. {   
  32. private Vector pool;   
  33. private int size;   
  34. DataSource db;   
  35.   
  36. public ConnectionPool()   
  37. {   
  38. pool = null;   
  39. size = 0;   
  40. db = new DataSource();   
  41. }   
  42.   
  43. public void setSize(int value)   
  44. {   
  45. if(value > 1)   
  46. size = value;   
  47. }   
  48.   
  49. public int getSize()   
  50. {   
  51. return size;   
  52. }   
  53.   
  54. public synchronized void initPool()   
  55. throws Exception   
  56. {   
  57. try   
  58. {   
  59. for(int x = 0; x < size; x++)   
  60. {   
  61. Connection conn = db.getConnection();   
  62. if(conn != null)   
  63. {   
  64. PooledConnection pcon = new PooledConnection(conn);   
  65. addConnection(pcon);   
  66. }   
  67. }   
  68.   
  69. }   
  70. catch(Exception e)   
  71. {   
  72. System.err.println(e.getMessage());   
  73. }   
  74. }   
  75.   
  76. private void addConnection(PooledConnection pcon)   
  77. {   
  78. if(pool == null)   
  79. pool = new Vector(size);   
  80. pool.addElement(pcon);   
  81. }   
  82.   
  83. public synchronized void releaseConnection(Connection conn)   
  84. {   
  85. int x = 0;   
  86. do   
  87. {   
  88. if(x >= pool.size())   
  89. break;   
  90. PooledConnection pcon = (PooledConnection)pool.elementAt(x);   
  91. if(pcon.getConnection() == conn)   
  92. {   
  93. System.err.println("Release Connection".concat(String.valueOf(String.valueOf(x))));   
  94. pcon.setInUse(false);   
  95. break;   
  96. }   
  97. x++;   
  98. }   
  99. while(true);   
  100. }   
  101.   
  102. public synchronized Connection getConnection()   
  103. throws Exception   
  104. {   
  105. PooledConnection pcon = null;   
  106. for(int x = 0; x < pool.size(); x++)   
  107. {   
  108. pcon = (PooledConnection)pool.elementAt(x);   
  109. if(!pcon.inUse())   
  110. {   
  111. pcon.setInUse(true);   
  112. return pcon.getConnection();   
  113. }   
  114. }   
  115.   
  116. try   
  117. {   
  118. Connection conn = db.getConnection();   
  119. pcon = new PooledConnection(conn);   
  120. pcon.setInUse(true);   
  121. pool.addElement(pcon);   
  122. }   
  123. catch(Exception e)   
  124. {   
  125. System.err.println("Exception error:".concat(String.valueOf(String.valueOf(e.getMessage()))));   
  126. }   
  127. return pcon.getConnection();   
  128. }   
  129.   
  130. public synchronized void emptyPool()   
  131. {   
  132. for(int x = 0; x < pool.size(); x++)   
  133. {   
  134. System.err.println("Closing Jdbc Connection".concat(String.valueOf(String.valueOf(x))));   
  135. PooledConnection pcon = (PooledConnection)pool.elementAt(x);   
  136. if(!pcon.inUse())   
  137. {   
  138. pcon.close();   
  139. continue;   
  140. }   
  141. try   
  142. {   
  143. Thread.sleep(3000L);   
  144. pcon.close();   
  145. }   
  146. catch(Exception e)   
  147. {   
  148. System.out.println("Exception :".concat(String.valueOf(String.valueOf(e.getMessage()))));   
  149. }   
  150. }   
  151.   
  152. db.close();   
  153. }   
  154. }   
  155. testpool.jsp内容如下:   
  156. <%@ page language="java" contentType="text/html;charset=gb2312"%>   
  157. <%@ page import="java.sql.*"%>   
  158.   
  159. <HTML>   
  160. <HEAD>   
  161. <TITLE>系统数据信息</TITLE>   
  162. </HEAD>   
  163. <BODY>   
  164. <%ConnectionPool db=new ConnectionPool();   
  165. Connection conn=db.getConnection();   
  166. Statement stmt=conn.createStatement();   
  167. String sql1="select * from pg_database ";   
  168.   
  169. ResultSet rs=stmt.executeQuery(sql1);   
  170. %>   
  171. <TABLE><TR><TD>系统数据库信息</TD></TR>   
  172. <TR><TD>   
  173. <%while(rs.next()) {   
  174. %>   
  175. <%=rs.getString(1)%>   
  176. <%}   
  177. rs.close();%>   
  178. </TR></TD>   
  179. <TABLE><TR><TD>系统字段信息</TD></TR>   
  180. <TR><TD>   
  181. <%String sql2="select * from pg_type";   
  182. rs=stmt.executeQuery(sql2);   
  183. while(rs.next()) {   
  184. %>   
  185. (<%=rs.getString(1)%>)   
  186. <%}   
  187. rs.close();   
  188. db.close();%>   
  189. </TR></TD>   
  190. </BODY>   
  191. </HTML>  








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值