当前位置: 网学 > 编程文档 > JSP > 正文

数据库连接池Java实现小结

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/17
下载{$ArticleTitle}原创论文样式
n(m_instance, m_instance.connparam);

if (_conn == null) continue;

System.out.println("connection创建");

m_instance.FreeConnectionPool.add(_conn);//加入空闲连接池

m_instance.current_conn_count ++;

//标志是否支持事务

m_instance.supportTransaction = _conn.isSupportTransaction(); 

}

}

catch(Exception e)

{

e.printStackTrace();

}

//根据策略判断是否需要查询

if (m_instance.ManageType != 0)

{

Thread t = new Thread(new FactoryMangeThread(m_instance));

t.start();



}

}

}

}



/**

* 标志工厂是否已经创建

* @return boolean

*/ 

public boolean isCreate()

{

return m_instance.isflag;

}



/**

* 从连接池中取一个空闲的连接

* @return Connection

* @throws SQLException

*/

public synchronized Connection getFreeConnection() 

throws SQLException

{

Connection conn = null;

//获取空闲连接

Iterator 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 (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(&

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号