社区
Web 开发
帖子详情
高手请进->关于连接池
blueeagle007
2003-04-09 11:27:14
请教:我现在要做jsp+javabean对oracle数据库操作。
我原先想的是:先定义一个类,如dbcon,仅定义数据连接。然后定义add,delete这样的类继承dbcon,这样很容易实现对数据库的操作,但是,不体现面向对象的思想。正确的做法应当抽象为数据库-> 连接池->sql管理->逻辑(可以包含如add(),delete这样的操作) 这样的层次,但我缺少对连接池的认识,能不能提供给我源码、相关文档、资料等,谢谢,帮帮我!
...全文
45
7
打赏
收藏
高手请进->关于连接池
请教:我现在要做jsp+javabean对oracle数据库操作。 我原先想的是:先定义一个类,如dbcon,仅定义数据连接。然后定义add,delete这样的类继承dbcon,这样很容易实现对数据库的操作,但是,不体现面向对象的思想。正确的做法应当抽象为数据库-> 连接池->sql管理->逻辑(可以包含如add(),delete这样的操作) 这样的层次,但我缺少对连接池的认识,能不能提供给我源码、相关文档、资料等,谢谢,帮帮我!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
AllError
2003-04-09
打赏
举报
回复
gz
JikLiu
2003-04-09
打赏
举报
回复
看看这个,自己要有自己的思路,理顺就可以了。
package com.jewes;
import java.io.*;
import java.sql.*;
import java.util.*;
import java.util.Date;
//建立DBConnectionManager
public class DBConnectionManager
{static private DBConnectionManager instance;
static private int clients;
private Vector drivers=new Vector();
private PrintWriter log;
private Hashtable pools=new Hashtable();
//返回唯一的实列
static synchronized public DBConnectionManager getInstance()
{if(instance==null)
{instance=new DBConnectionManager();
}
clients++;
return instance;
}
//构造函数!
private DBConnectionManager()
{init();
}
//结束构造函数
//释放一个连接
public void freeConnection(String name,Connection con)
{DBConnectionPool pool=(DBConnectionPool)pools.get(name);
if(pool!=null)
{pool.freeConnection(con);
}
}
//结束释放一个连接
//取得一个连接
public Connection getConnection(String name)
{DBConnectionPool pool=(DBConnectionPool)pools.get(name);
if(pool!=null)
{return pool.getConnection();
}
return null;
}
public Connection getConnection(String name,long time)
{DBConnectionPool pool=(DBConnectionPool)pools.get(name);
if(pool!=null)
{return pool.getConnection(time);
}
return null;
}
//结束getconnection
//关闭所有连接
public synchronized void release()
{
{if(--clients!=0)
return;
}
Enumeration allPools=pools.elements();
while(allPools.hasMoreElements())
{DBConnectionPool pool=(DBConnectionPool)allPools.nextElement();
pool.release();
}
Enumeration allDrivers=drivers.elements();
while(allDrivers.hasMoreElements())
{Driver driver=(Driver)allDrivers.nextElement();
try
{DriverManager.deregisterDriver(driver);
log("撤消JDBC驱动程序"+driver.getClass().getName());
}
catch(SQLException e)
{log(e,"无法撤消JDBC驱动程序的注册"+driver.getClass().getName());
}
}
}
private void createPools(Properties props)
{Enumeration propNames=props.propertyNames();
while(propNames.hasMoreElements())
{String name=(String) propNames.nextElement();
if(name.endsWith(".url"))
{String poolName=name.substring(0,name.lastIndexOf("."));
String url=props.getProperty(poolName+".url");
if(url==null)
{log("没有连接池"+poolName+"指定的URL");
continue;
}
String user=props.getProperty(poolName+".user");
String password=props.getProperty(poolName+".password");
String maxconn= props.getProperty(poolName+".maxconn","0");
int max;
try
{max=Integer.valueOf(maxconn).intValue();
}
catch(NumberFormatException e)
{log("错误的最大连接数:"+maxconn+".连接池"+poolName);
max=0;
}
DBConnectionPool pool=new DBConnectionPool(poolName,url,user,password,max);
pools.put(poolName,pool);
log("成功创建连接池"+poolName);
}
}
}
private void init()
{InputStream is=getClass().getResourceAsStream("/db.properties");
Properties dbProps=new Properties();
try
{dbProps.load(is);
}
catch(Exception e)
{System.err.println("不能读取属性文件。请确保db.properties在你的CLASSPATH中");
return;
}
String logFile=dbProps.getProperty("logfile","DBConnectionManager.log");
try
{log=new PrintWriter(new FileWriter(logFile,true),true);
}
catch(IOException e)
{System.err.println("无法打开日志文件:"+logFile);
log=new PrintWriter(System.err);
}
loadDriver(dbProps);
createPools(dbProps);
}
private void loadDriver(Properties props)
{String driverClasses=props.getProperty("drivers");
StringTokenizer st=new StringTokenizer(driverClasses);
while(st.hasMoreElements())
{String driverClassName=st.nextToken().trim();
try
{Driver driver=(Driver)Class.forName(driverClassName).newInstance();
DriverManager.registerDriver(driver);
drivers.addElement(driver);
log("成功注册驱动程序"+driverClassName);
}
catch(Exception e)
{log("无法注册驱动程序:"+driverClassName+",错误"+e);
}
}
}
private void log(String msg)
{log.println(new Date()+":"+msg);
}
private void log(Throwable e,String msg)
{log.println(new Date()+":"+msg);
e.printStackTrace(log);
}
class DBConnectionPool
{private int checkOut;
private Vector freeConnections=new Vector();
private int maxconn;
private String name;
private String password;
private String URL;
private String user;
public DBConnectionPool(String name,String URL,String user,String password,int maxconn)
{this.name=name;
this.URL=URL;
this.password=password;
this.user=user;
this.maxconn=maxconn;
}
public synchronized void freeConnection(Connection con)
{freeConnections.addElement(con);
checkOut--;
notifyAll();
}
public synchronized Connection getConnection()
{Connection con=null;
if(freeConnections.size()>0)
{con=(Connection)freeConnections.firstElement();
freeConnections.removeElementAt(0);
try
{if(con.isClosed())
{log("从连接池"+name+"删除一个连接");
con=getConnection();
}
}
catch(SQLException e)
{log("从连接池"+name+"删除一个连接");
con=getConnection();
}
}
else if(maxconn==0||checkOut<maxconn)
{con=newConnection();
}
if(con!=null)
{checkOut++;
}
return con;
}
public synchronized Connection getConnection(long timeout)
{long startTime=new Date().getTime();
Connection con;
while((con=getConnection())==null)
{ try
{wait(timeout);
}
catch(InterruptedException e)
{}
if((new Date().getTime()-startTime)>=timeout)
{return null;
}
}
return con;
}
public void release()
{Enumeration allConnections=freeConnections.elements();
while(allConnections.hasMoreElements())
{Connection con=(Connection)allConnections.nextElement();
try
{con.close();
log("关闭连接池"+name+"中的连接");
}
catch(SQLException e)
{log(e,"无法关闭连接池"+name+"中的连接");
}
}
freeConnections.removeAllElements();
}
private Connection newConnection()
{Connection con=null;
try
{con=DriverManager.getConnection(URL,user,password);
log("连接池"+name+"创建一个新的连接");
}
catch(SQLException e)
{log(e,"无法创建下列URL的连接"+URL);
return null;
}
return con;
}
}
}
flashroom
2003-04-09
打赏
举报
回复
http://www.chinabs.net/Servlet/default.asp?infoid=12
有详细代码说明
-------------------------------------------------------------------
我的签名:我做了两天斑竹就被撤了,为什么????
zhxx
2003-04-09
打赏
举报
回复
连接池的代码这里有不少
你搜索一下
zpwly
2003-04-09
打赏
举报
回复
http://expert.csdn.net/Expert/topic/1357/1357306.xml?temp=.231106
zpwly
2003-04-09
打赏
举报
回复
连接池(不仅仅是数据库,还有很多其它的连接池)的目的是为了节省系统资源占用,提高系统运行效率。
在一个大型的企业级应用中,客户端数量很大,且不可预测。若每一个客户端都与其所申请的系统资源真实连接,一方面系统资源会很快用完,另一方面客户端在使用系统资源时都不可能全时使用,如一个数据库连接的资源,客户端只有在读数及保存时才真正使用,在客户端对数据进行处理时,此连接一直保持,其实是在浪费系统资源。
针对此问题,可以通过连接池来解决,一个连接池本身的实现中包括两方面内容,一是与系统资源的真实连接,一是与客户端的虚拟连接。
客户端向连接池申请来得到系统资源,而客户端是否真正得到资源的算法由连接池控制,最终的效果是客户端认为已与系统资源连接上了即可。
而连接池只保持与系统资源的几个(一些)真实连接,通过算法在多客户端间轮回服务。就好象饭店的服务员,只要有几个人就可以为很多人服务。
zpwly
2003-04-09
打赏
举报
回复
设置weblogic连接池:
pool的配置:
假设已配置服务:expserv
且数据库服务器机器名为:expserv
数据库sid:expservSID,用户名和密码都为:expserv
以weblogic7.0为例,首先启动服务
http://localhost:port/console
打开service\jdbc\connection pools
配置oraclePool如下:
Configuration:
Name: oraclePool
URL: jdbc:oracle:thin:@expserv:1521:expservSID
Driver Classname: oracle.jdbc.driver.OracleDriver
Properties(key=value): user=expserv
Targets:
Targets-Server:expserv
在weblogic7.0中除了数据库密码,其他的pool参数都可以在config.xml中直接用文本编辑器直接修改。
Delphi / C++ Builder XE7专用BDE数据库引擎安装包(15.0.0.0)
>|是| C[导出 CONFIG.SYS 到共享目录]B -->|否| D[本地测试完成]C --> E[目标机器运行 BDE Administrator]E --> F[导入 CONFIG.SYS 配置文件]F --> G[验证别名有效性]G --> H[启动应用程序测试连接]H --> I{连接成功...
我的Java开发学习之旅------>Java经典面试题
我的Java开发学习之旅------>Java经典面试题 摘自张孝祥itcast 从享受生活的角度上来说:“程序员并不是一种最好的职业,我认为两种人可以做程序员,第一,你不做程序员,你就没有什么工作可做,或者说是即使...
VB错误代码查询工具与学习资源完整包
下标越界”(Error 9)...下面是一个安全的动态数组扩展流程图:graph LRA[声明动态数组] --> B[首次Redim分配初始大小]B --> C[填充数据]C --> D{是否需要扩容?D -- 是 --> E[使用Redim Preserve扩展末维]E --> C。
(1) other&interview --> 设计模式:Java开发中的23种设计模式详解(转)
Java之美[从菜鸟到
高手
演变]系列 之设计模式,我们会以理论与实践相结合的方式来进行本章的学习,希望广大程序爱好者, 学好设计模式,做一个优秀的软件工程师! 企业级项目实战(带源码)地址 : ...
socket
连接池
socket
连接池
2011-06-16 20:40:54| 分类: 网络服务编程技术 | 标签: |字号大中小 订阅 socket
连接池
SOCKET
连接池
原来注意过,但时间长了,对这个的了解有些乱,今天总结一下,趁着天气比较...
Web 开发
81,115
社区成员
341,731
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章