Java 的简单数据库连接池实现
来源:互联网 发布:unity3d 制作2d动画 编辑:程序博客网 时间:2024/05/16 23:40
一个连接容器,记录连接和连接使用状况
一个操作和管理连接容器的连接池
package db.khan;
import java.sql.*;
/**//*数据库连接容器
* */
public class DBPoolCon {
/**//*容器中的连接*/
public Connection con = null;
public int nUsedTimes = 0;
DBPoolCon() {
}
public Connection get() {
return con;
}
}
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");
}
}
}
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数据库连接池简单实现
- 数据库连接池的简单实现
- 数据库连接池的简单实现
- 数据库连接池的简单实现
- 数据库连接池的简单实现
- 数据库连接池的简单实现
- 数据库连接池的简单实现
- DbConnection.java实现简单的MySQL数据库连接
- 数据库连接池的Java实现
- Java 数据库连接池的实现
- 一种简单JDBC数据库连接池的实现
- 一种简单JDBC数据库连接池的实现
- 一种简单JDBC数据库连接池的实现
- 一种简单JDBC数据库连接池的实现
- LinkedList实现简单的数据库连接池
- 谁还要Gmail的邀请?
- J2EE面试题集锦
- Java设计模式之外观模式研究
- 迟来的新世界
- 人生50件开心事
- Java 的简单数据库连接池实现
- 如何提取PSD文件缩略图查看功能
- 中国人写的编译器-值得看看
- [大杂烩]» 出师未捷欠债百万 大学生创业路怎么走?(
- 算法设计
- 办公自动化系统OA市场发展新趋势
- 做自己
- 再说OA:白动化到自动化
- digging!!!