知识大全 Oracle数据库 关于连接池一
Posted 属性
篇首语:花门楼前见秋草,岂能贫贱相看老。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle数据库 关于连接池一相关的知识,希望对你有一定的参考价值。
Oracle数据库 关于连接池一 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
到目前为目 JDBC 的连结池只是一个接口 没有真正的实现 JDBC 正在开发中 据报已经支持连结池 但JDBC 用了JNDI技术 连结池的配置可以让一个高手都烦死 目前第三方已经实现的连结池当然是poolman 版对一般用户来说已经足够用了 配置也简单 版虽然增加了一些功能 但配置也是采用JNDI 对RMI和EJB不懂的朋友可能很烦 建议用 的了 如果有兴趣 自己也可以实现连结池 最关键的技术也就是把连结作为参数传给一个BEAN 用完后返回这个参数连结而不是关闭 下面是一个简单的实现: DBConnectionManager java程序清单如下 import java io *; import java sql *; import java util *; import java util Date; /** * 管理类DBConnectionManager支持对一个或多个由属性文件定义的数据库连接 * 池的访问 客户程序可以调用getInstance()方法访问本类的唯一实例 */ public class DBConnectionManager static private DBConnectionManager instance; // 唯一实例 static private int clients; private Vector drivers = new Vector(); private PrintWriter log; private Hashtable pools = new Hashtable(); /** * 返回唯一实例 如果是第一次调用此方法 则创建实例 * * @return DBConnectionManager 唯一实例 */ static synchronized public DBConnectionManager getInstance() if (instance == null) instance = new DBConnectionManager(); clients++; return instance; /** * 建构函数私有以防止其它对象创建本类实例 */ private DBConnectionManager() init(); /** * 将连接对象返回给由名字指定的连接池 * * @param name 在属性文件中定义的连接池名字 * @param con 连接对象\\\\r */ public void freeConnection(String name Connection con) DBConnectionPool pool = (DBConnectionPool) pools get(name); if (pool != null) pool freeConnection(con); /** * 获得一个可用的(空闲的)连接 如果没有可用连接 且已有连接数小于最大连接数 * 限制 则创建并返回新连接 * * @param name 在属性文件中定义的连接池名字 * @return Connection 可用连接或null */ public Connection getConnection(String name) DBConnectionPool pool = (DBConnectionPool) pools get(name); if (pool != null) return pool getConnection(); return null; /** * 获得一个可用连接 若没有可用连接 且已有连接数小于最大连接数限制 * 则创建并返回新连接 否则 在指定的时间内等待其它线程释放连接 * * @param name 连接池名字 * @param time 以毫秒计的等待时间\\\\r * @return Connection 可用连接或null */ public Connection getConnection(String name long time) DBConnectionPool pool = (DBConnectionPool) pools get(name); if (pool != null) return pool getConnection(time); return null; /** * 关闭所有连接 撤销驱动程序的注册\\\\r */ public synchronized void release() // 等待直到最后一个客户程序调用 if ( clients != ) 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()); /** * 根据指定属性创建连接池实例 * * @param props 连接池属性 */ 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( 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 ); int max; try max = Integer valueOf(maxconn) intValue(); catch (NumberFormatException e) log( 错误的最大连接数限制: + maxconn + 连接池: + poolName); max = ; 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); loadDrivers(dbProps); createPools(dbProps); /** * 装载和注册所有JDBC驱动程序\\\\r * * @param props 属性 */ private void loadDrivers(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( 成功注册JDBC驱动程序\\\\\\ + driverClassName); catch (Exception e) log( 无法注册JDBC驱动程序: + 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); /** * 此内部类定义了一个连接池 它能够根据要求创建新连接 直到预定的最\\\\r cha138/Article/program/Oracle/201311/17331相关参考
知识大全 连接oracle的总结(关于tnsname和监听)
该文是我连接oracle的总结特别适合于程序开发人员与oracle菜鸟 如何配置才能使客户端连到数据库要使一个客户端机器能连接oracle数据库需要在客户端机器上安装oracle
知识大全 关于JDBC客户端如何连接ORACLE数据库RAC的负载均衡
关于JDBC客户端如何连接ORACLE数据库RAC的负载均衡 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
知识大全 关于oracle集群后的weblogic数据源配置
有两个db做了RAC虚拟路径为ypdbweblogic的数据源连接URL改为下面 当其中一台db挂了保证数据源连接正常 jdbc:oracle:thin:@ (DESCRIPTION= (
通过Oracle连接管理器控制数据库连接 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 为了更好
如何配置才能使客户端连到数据库 要使一个客户端机器能连接oracle数据库需要在客户端机器上安装oracle的客户端软件唯一的例外就是java连接数据库的时候可以用jdbcthin模式不用装or
通过JDBC连接oracle数据库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Java数据库连接
Oracle数据库中的(+)连接 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 从表AA(+)=
Oracle数据库中的(+)连接如何操作? 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文主
asp.net连接Oracle数据库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!代码如下&nbs
知识大全 连接Oracle数据库的Hibernate配置文件
连接Oracle数据库的Hibernate配置文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!