连接池

  1  package  kl.db;
  2 
  3  import  java.sql.Connection;
  4  import  java.sql.DriverManager;
  5  import  java.sql.PreparedStatement;
  6  import  java.sql.ResultSet;
  7  import  java.sql.SQLException;
  8  import  java.sql.Statement;
  9  import  java.util.Stack;
 10 
 11  /*
 12   * 驱动:JTDS
 13   *      需放在Java\jre6\lib\ext 中
 14   * 
 15   * 使用说明:使用本类请不要New ConnManagerPool;
 16   *          要获得本类的对象请使用函数getInstance();
 17   * 用例:ConnManagerPool myConn;
 18   *      myConn = ConnManagerPool.getInstance();
 19    */
 20  public   class  ConnManagerPool {
 21 
 22       /*
 23       * 使用SQL server 2000 + 数据库驱动STDS 的连接参数
 24        */
 25       final  String driver  =   " net.sourceforge.jtds.jdbc.Driver " ;
 26       final  String url  =   " jdbc:jtds:sqlserver://localhost:1433;DatabaseName=MarketManager " ;
 27       final  String user = " sa " ;
 28       final  String password = " sa " ;
 29          
 30       /*
 31       * 数据库连接池的保存栈
 32        */
 33       private   int  minConn  =   0 ;
 34       private   int  maxConn  =   10 ;
 35       private   int  connAmount  =   0 ;
 36       private  Stack < Connection >  connStack  =   new  Stack < Connection > ();
 37      
 38       /*
 39       * 全局共享一个数据库连接类
 40        */
 41       private   static  ConnManagerPool instance;  
 42       public   static  ConnManagerPool getInstance(){
 43           if ( instance  ==   null  )
 44              instance  =   new  ConnManagerPool();
 45           return  instance;
 46      }
 47      
 48       /*
 49       * 构造函数:初始化自动生成最少数量的连接Connection;
 50        */
 51       public  ConnManagerPool() {
 52           for ( int  i  =   0 ; i  <   minConn; i ++  )
 53              connStack.push( newConnection() );
 54      }
 55      
 56       /*
 57      * 功能:内部使用,生成一个数据库连接并返回
 58      *if success return default connection, failed return null;
 59       */
 60       public  Connection newConnection() {
 61          Connection conn  =   null ;
 62           try  {
 63              Class.forName( driver );
 64              conn =  DriverManager.getConnection(url,user,password);
 65              connAmount ++ ;
 66          }  catch  (ClassNotFoundException e) {
 67              conn  =   null ;
 68          }  catch  (SQLException e) {
 69              conn  =   null ;
 70          } 
 71           return  conn;
 72      }
 73          
 74       /*
 75      * 功能:通过累对象返回的数据库连接
 76      *if success return default connection, failed return null;
 77       */
 78       public  Connection getConnection() {
 79          Connection conn  =   null ;
 80           if ! connStack.isEmpty() ){
 81              conn  =  connStack.pop();
 82          } else   if ( connAmount  <  maxConn ){
 83              conn  =  newConnection();
 84          } else {
 85               try  {
 86                  wait(  100000  );
 87                   return  getConnection();
 88              }  catch  ( InterruptedException e) {
 89                  conn  =   null ;
 90              }
 91          }
 92           return  conn;
 93      }
 94      
 95       /*
 96      * 功能:释放数据库连接,并压回连接池
 97       */
 98       public   void  freeConnection( Connection conn ) {
 99           try {
100               if ( conn  !=   null  )
101              {
102                  connStack.push( conn );
103                  notifyAll();
104              }
105          } catch ( Exception e){
106              
107          }
108      }
109 
110       /*
111       * 功能:Statement,通过类名调用
112       * if success return a Statement, failed return null;
113        */
114       public  Statement getStatement( Connection conn ) {
115          Statement stmt  =   null
116           try  {
117               if ( conn  !=   null  ) {
118                  stmt  =  conn.createStatement();
119              }
120          }  catch  ( SQLException e ) {
121              stmt  =   null ;
122              
123          }
124           return  stmt;
125      }
126 
127       /*
128       * 功能:PreparedStatement,通过类名调用
129       * if success return a PreparedStatement, failed return null;
130        */
131       public  PreparedStatement getPreparedStatement(Connection conn,String sql) {
132          PreparedStatement pstmt  =   null
133           try  {
134               if ( conn  !=   null  ) {
135                  pstmt  =  conn.prepareStatement(sql);
136              }        
137          }  catch  ( SQLException e ) {
138              pstmt  =   null ;
139          }
140           return  pstmt;
141      }
142      
143       /*
144       * 功能:通过SQL语句,返回结果集,通过类名调用
145       * if success return data of database, failed return null;
146        */
147       public  ResultSet executeQuery( Statement stmt, String sql ) {
148          ResultSet rs  =   null ;
149           try  {
150               if (stmt  !=   null ) {
151                  rs  =  stmt.executeQuery(sql);
152              }
153          }  catch  (SQLException e) {
154              rs  =   null ;
155          }
156           return  rs;
157      }
158      
159       public  ResultSet executeQuery( PreparedStatement pstmt) {
160          ResultSet rs  =   null ;
161           try  {
162               if (pstmt  !=   null ) {
163                  rs  =  pstmt.executeQuery();
164              }
165          }  catch  (SQLException e) {
166              rs  =   null ;
167          }
168           return  rs;
169      }
170      
171       /*
172       * 功能:根据SQL代码更新数据库
173       * if success return true, failed return false;
174        */
175       public   boolean  executeUpdate( Statement stmt, String sql ) {
176           boolean  mark  =   false ;
177           try  {
178               if (stmt  !=   null ) {
179                  stmt.executeUpdate(sql);
180              }
181              mark  =   true ;
182          }  catch  (SQLException e) {
183              mark  =   false ;
184          }
185           return  mark;
186      }
187      
188       public   boolean  executeUpdate( PreparedStatement pstmt) {
189           boolean  mark  =   false ;
190           try  {
191               if (pstmt  !=   null ) {
192                  pstmt.executeUpdate();
193              }
194              mark  =   true ;
195          }  catch  (SQLException e) {
196              mark  =   false ;
197          }
198           return  mark;
199      }
200 
201       /*
202       * 功能:关闭ResultSet
203       * if success return true, failed return false;
204        */
205       public   boolean  close(ResultSet rs) {
206           boolean  mark  =   false ;
207           try  {
208               if ( rs  !=   null  ) {
209                  rs.close();
210                  rs  =   null ;
211              }
212              mark  =   true ;
213          }  catch  ( SQLException e ) {
214              mark  =   false ;
215          }
216           return  mark;
217      }
218      
219       /*
220       * 功能:关闭Statement
221       * if success return true, failed return false;
222        */
223       public   boolean  close(Statement stmt) {
224           boolean  mark  =   false ;
225           try  {
226               if ( stmt  !=   null  ) {
227                  stmt.close();
228                  stmt  =   null ;
229              }
230              mark  =   true ;
231          }  catch  ( SQLException e ) {
232              mark  =   false ;
233          }
234           return  mark;
235      }
236 
237       /*
238       * 功能:关闭PreparedStatement
239       * if success return true, failed return false;
240        */
241       public   boolean  close(PreparedStatement pstmt) {
242           boolean  mark  =   false ;
243           try  {
244               if ( pstmt  !=   null  ) {
245                  pstmt.close();
246                  pstmt  =   null ;
247              }
248              mark  =   true ;
249          }  catch  ( SQLException e ) {
250              mark  =   false ;
251          }
252           return  mark;
253      }
254      
255       /*
256       * 功能:关闭Connection
257       * if success return true, failed return false;
258        */
259       public   boolean  close(Connection conn) {
260           boolean  mark  =   false ;
261           try  {
262               if ( conn  !=   null  ) {
263                  conn.close();
264                  conn  =   null ;
265              }
266              mark  =   true ;
267          }  catch  ( SQLException e ) {
268              mark  =   false ;
269          }
270           return  mark;
271      }
272  }
273          
274 
275 

 

转载于:https://www.cnblogs.com/kevinlocn/archive/2009/12/28/1634471.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值