数据库连接池Java实现小结 - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-23
onn); //加入连接池 m_instance.ConnectionPool.add(_conn); break; } } //检查空闲池是否为空 if (m_instance.FreeConnectionPool.isEmpty()) { //再检查是否能够分配 if (m_instance.current_conn_count < m_instance.MaxConnectionCount) { //新建连接到空闲连接池 int newcount = 0 ; //取得要建立的数目 if (m_instance.MaxConnectionCount - m_instance.current_conn_count >= m_instance.MinConnectionCount) { newcount = m_instance.MinConnectionCount; } else { newcount = m_instance.MaxConnectionCount - m_instance.current_conn_count; } //创建连接 for (int i=0;i <newcount; i++) { _Connection _conn = _Connection.getConnection(m_instance, m_instance.connparam); m_instance.FreeConnectionPool.add(_conn); m_instance.current_conn_count ++; } } else {//如果不能新建,检查是否有已经归还的连接 iter = m_instance.ConnectionPool.iterator(); while(iter.hasNext()){ _Connection _conn = (_Connection)iter.next(); if(!_conn.isFree()){ conn = _conn.getFreeConnection(); _conn.setIsFree(false); m_instance.ConnectionPool.remove(_conn); m_instance.FreeConnectionPool.add(_conn); break; } } } }//if (FreeConnectionPool.isEmpty()) //再次检查是否能分配连接 if(conn == null){ iter = m_instance.FreeConnectionPool.iterator(); while(iter.hasNext()){ _Connection _conn = (_Connection)iter.next(); if(!_conn.isFree()){ conn = _conn.getFreeConnection(); _conn.setIsFree(true); m_instance.FreeConnectionPool.remove(_conn); m_instance.ConnectionPool.add(_conn); break; } } if(conn == null)//如果不能则说明无连接可用 throw new SQLException("没有可用的数据库连接"); } System.out.println("get connection"); return conn; } /** * 关闭该连接池中的所有数据库连接 * @throws SQLException */ public synchronized void close() throws SQLException { this.isflag = false; SQLException excp = null; //关闭空闲池 Iterator iter = m_instance.FreeConnectionPool.iterator(); while(iter.hasNext()){ try{ ((_Connection)iter.next()).close(); System.out.println("close connection:free"); m_instance.current_conn_count --; }catch(Exception e){ if(e instanceof SQLException) excp = (SQLException)e; } } //关闭在使用的连接池 iter = m_instance.ConnectionPool.iterator(); while(iter.hasNext()){ try{ ((_Connection)iter.next()).close(); System.out.println("close connection:inused"); m_instance.current_conn_count --; }catch(Exception e){ if(e instanceof SQLException) excp = (SQLException)e; } } if(excp != null) throw excp; } /** * 返回是否支持事务 * @return boolean */ public boolean isSupportTransaction() { return m_instance.supportTransaction; } /** * 连接池调度管理 * */ public void |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于数据库连接池Java实现小结 - 编程入门网的所有评论