Java 的简单数据库连接池实现
2006-04-09 11:00
597 查看
一个连接容器,记录连接和连接使用状况
package db.khan;
import java.sql.*;
/**//*数据库连接容器
* */
public class DBPoolCon
{
/**//*容器中的连接*/
public Connection con = null;
public int nUsedTimes = 0;
DBPoolCon()
{
}
public Connection get()
{
return con;
}
}
一个操作和管理连接容器的连接池
package db.khan;
import java.sql.*;
import java.util.*;
/** *//**连接池类
* */
public class DBConPool
{
protected LinkedList listCon = new LinkedList();// 一个存放链接池的链表
protected String DBUrl = null;
protected String DBUser = null;
protected String DBPasswd = null;
/** *//**最大连接数*/
protected int nMaxCon = 0;
/** *//**连接最大使用时间*/
protected int nMaxUsedTime = 0;
/** *//**当前已用连接数*/
protected int nConNum = 0;
/** *//**构造器
* @param String DBUrl
* @param String DBUser
* @param String DBPasswd
* @param int nMaxCon
* @param int nMaxUsedTime*/
DBConPool(String DBUrl, String DBUser, String DBPasswd, int nMaxCon, int nMaxUsedTime)
{
this.DBUrl = DBUrl;
this.DBUser = DBUser;
this.DBPasswd = DBPasswd;
this.nMaxCon = nMaxCon;
this.nMaxUsedTime = nMaxUsedTime;
}
/** *//**从连接池中取得连接(线程安全函数)
* @return DBPoolCon 返回的数据库连接容器
* */
synchronized public DBPoolCon get()
{
if (listCon.size() > 0)
{//有连接时,直接取得连接
return (DBPoolCon) listCon.removeFirst();
}
if (nConNum < nMaxCon)
{//如果没有多余连接,但连接池未满,新建一个连接
return createCon();
}
System.out.println("Fail to get DB con, too many con: " + nConNum + " max:" + nMaxCon);
return null;
}
/** *//**销毁连接
* @param DBPoolCon pCon*/
synchronized public void release(DBPoolCon pCon)
{
pCon.nUsedTimes++;
if (pCon.nUsedTimes > nMaxUsedTime)
{//如果使用时间大于最大使用时间,则该连接被回收
try
{
nConNum--;
pCon.con.close();
System.out.println("DB Con closed for used out");
} catch (Exception e)
{
System.err.println("Fail to close DB Con");
}
} else
{ //否则,该连接被重新分配
listCon.add(pCon);
}
}
/** *//**建立连接容器
* @return DBPoolCon 返回一个连接容器*/
protected DBPoolCon createCon()
{
DBPoolCon pCon = new DBPoolCon();
try
{
pCon.con = DriverManager.getConnection(DBUrl, DBUser, DBPasswd);
pCon.con.setAutoCommit(true);
nConNum++;
System.out.println("DB Con created, con num:" + nConNum + " max:" + nMaxCon);
} catch (Exception e)
{
System.err.println("Fail to create DB Con");
}
return pCon;
}
/** *//**回收器
* 将连接池中的所有连接关闭*/
protected void finalize()
{
try
{
while (listCon.size() > 0)
{
DBPoolCon pCon = (DBPoolCon) listCon.removeFirst();
pCon.con.close();
}
} catch (Exception e)
{
System.err.println("Fail to close DB Con");
}
}
}
package db.khan;
import java.sql.*;
/**//*数据库连接容器
* */
public class DBPoolCon
{
/**//*容器中的连接*/
public Connection con = null;
public int nUsedTimes = 0;
DBPoolCon()
{
}
public Connection get()
{
return con;
}
}
一个操作和管理连接容器的连接池
package db.khan;
import java.sql.*;
import java.util.*;
/** *//**连接池类
* */
public class DBConPool
{
protected LinkedList listCon = new LinkedList();// 一个存放链接池的链表
protected String DBUrl = null;
protected String DBUser = null;
protected String DBPasswd = null;
/** *//**最大连接数*/
protected int nMaxCon = 0;
/** *//**连接最大使用时间*/
protected int nMaxUsedTime = 0;
/** *//**当前已用连接数*/
protected int nConNum = 0;
/** *//**构造器
* @param String DBUrl
* @param String DBUser
* @param String DBPasswd
* @param int nMaxCon
* @param int nMaxUsedTime*/
DBConPool(String DBUrl, String DBUser, String DBPasswd, int nMaxCon, int nMaxUsedTime)
{
this.DBUrl = DBUrl;
this.DBUser = DBUser;
this.DBPasswd = DBPasswd;
this.nMaxCon = nMaxCon;
this.nMaxUsedTime = nMaxUsedTime;
}
/** *//**从连接池中取得连接(线程安全函数)
* @return DBPoolCon 返回的数据库连接容器
* */
synchronized public DBPoolCon get()
{
if (listCon.size() > 0)
{//有连接时,直接取得连接
return (DBPoolCon) listCon.removeFirst();
}
if (nConNum < nMaxCon)
{//如果没有多余连接,但连接池未满,新建一个连接
return createCon();
}
System.out.println("Fail to get DB con, too many con: " + nConNum + " max:" + nMaxCon);
return null;
}
/** *//**销毁连接
* @param DBPoolCon pCon*/
synchronized public void release(DBPoolCon pCon)
{
pCon.nUsedTimes++;
if (pCon.nUsedTimes > nMaxUsedTime)
{//如果使用时间大于最大使用时间,则该连接被回收
try
{
nConNum--;
pCon.con.close();
System.out.println("DB Con closed for used out");
} catch (Exception e)
{
System.err.println("Fail to close DB Con");
}
} else
{ //否则,该连接被重新分配
listCon.add(pCon);
}
}
/** *//**建立连接容器
* @return DBPoolCon 返回一个连接容器*/
protected DBPoolCon createCon()
{
DBPoolCon pCon = new DBPoolCon();
try
{
pCon.con = DriverManager.getConnection(DBUrl, DBUser, DBPasswd);
pCon.con.setAutoCommit(true);
nConNum++;
System.out.println("DB Con created, con num:" + nConNum + " max:" + nMaxCon);
} catch (Exception e)
{
System.err.println("Fail to create DB Con");
}
return pCon;
}
/** *//**回收器
* 将连接池中的所有连接关闭*/
protected void finalize()
{
try
{
while (listCon.size() > 0)
{
DBPoolCon pCon = (DBPoolCon) listCon.removeFirst();
pCon.con.close();
}
} catch (Exception e)
{
System.err.println("Fail to close DB Con");
}
}
}
相关文章推荐
- 用Java实现简单选择排序
- java 实现短信发送简单例子
- 几种简单的负载均衡算法及其Java代码实现
- java模拟电梯运行简单实现,swing界面
- java网络编程:DatagramSocket类简单实现文件下载
- Android JNI实现简单的c层调用Java层函数(C层调用Java层Toast进行提示)
- java模拟实现简单的读写锁
- java 简单验证码实现
- 基于Java实现简单Http服务器之一
- Java 超简单实现发送邮件(可动态控制发送人数)
- java实现简单算法(一)
- 简单实现Java验证码功能
- java实现简单的单点登录_转
- 使用Java实现简单串口通信
- Java 实现一个简单的web服务器
- java中struts2实现简单的文件上传与下载
- 创建图形用户界面GUI和事件监听机制的简单实现(java)
- Java实现简单冒泡排序
- Java实现一个简单的RPC框架(五) 基于Socket的传输层实现
- 感知机学习算法的原始形式的java简单实现