`
沙漠绿树
  • 浏览: 429462 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle数据库链接池

阅读更多
引用
    很多时候我们都要操作数据库,高效数据库操作的第一步就是在数据库连接上面,要体现高效,数据库连接池就不可少的了。以下是我工程使用的oracle9i以上版本的数据库连接池。使用的oracle连接jar包在附件中,SlcxLogger.java类在我之前的博客《log4j介绍、配置与使用》中。



import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import org.apache.log4j.Logger;

import com.slcx.log.SlcxLogger;

import oracle.jdbc.pool.OracleConnectionCacheManager;
import oracle.jdbc.pool.OracleDataSource;

/**
 * Oracle数据库链接池。
 * 
 * @作者 华龙
 * 
 * @日期 2010-01-05
 */
public class OraConnPool {
	
	//是否初始化
	private static boolean initStatus = false;
	//连接数据源
	private static OracleDataSource orads = null;
	//连接池日志	
	private static Logger logger=SlcxLogger.getLogger(OraConnPool.class);
	

	public synchronized static Connection getConnection() {
		// 加载默认的配置,配置文件跟类文件在同意一个包
		return getConnection(null);
		
		// 加载自定义的配置
//		return getConnection("./config/connpool.properties");
	}
	
	public static Connection getConnection(String properties) {
		if (initStatus == false) {
			initial(properties);
		}
		Connection conn = null;
		
		if (orads != null) {
			try {
				conn = orads.getConnection();
			} catch (SQLException e) {
				logger.error("获取一个数据库连接异常",e);
			}
		}
		
		while (conn == null) {
			try {
				Thread.sleep(1000*10);
			} catch (InterruptedException e) {
				logger.error("连接池线程休眠异常",e);
			}
			
			initial(properties);
			
			try {
				conn = orads.getConnection();
			} catch (SQLException e) {
				logger.error("获取一个数据库连接异常",e);
			}
		}
		
//		try {
//			OracleConnectionCacheManager occm = OracleConnectionCacheManager
//					.getConnectionCacheManagerInstance();
//			logger.debug("得到 slcx 缓存中激活的连接:"
//					+ occm.getNumberOfActiveConnections("slcx") + " 可用的链接:"
//					+ occm.getNumberOfAvailableConnections("slcx") + " 线程的编号:"
//					+ Thread.currentThread().getId());
//		} catch (Exception e) {
//			logger.error("输出连接池信息错误", e);
//		}
		
		return conn;
	}
	
	/**
	 * 初始化数据库连接池数据源
	 */
	public static void initial(String properties) {
		//关闭ORA数据库链接数据源
		if (orads != null) {
			try {
				orads.close();
			} catch (Exception e) {
				logger.info("关闭数据源异常",e);
			}
			orads = null;
		}
		
		try {
			Properties props = new Properties();
			if(properties!=null){
				//加载默认数据连接池配置文件。
				props.load(new FileInputStream(properties));
			}
			else{
				//加载自定义数据连接池配置文件。
				props.load(OraConnPool.class.getResourceAsStream("connpool.properties"));
			}
			
			//获取数据库连接池:链接URL,账号,密码
			String url = props.getProperty("url");
			String username = props.getProperty("username");
			String password = props.getProperty("password");
			
			
			orads = new OracleDataSource();
			//设置数据库连接池:链接URL,账号,密码
			orads.setURL(url);
			orads.setUser(username);
			orads.setPassword(password);
			
			
			//设置连接缓存是否可用,这里设置true
			orads.setConnectionCachingEnabled(true);
			//设置其他连接缓存配置
			orads.setConnectionCacheProperties(props);

			
			//为连接池的高速缓存取个名字
			orads.setConnectionCacheName("slcx");
			
			initStatus = true;
		} catch (Exception e) {
			initStatus = false;
			logger.error("初始ORACLE数据源异常",e);
		}
	}

	
	/**
	 * 关闭各种有关数据库操作对象
	 * @param rs 结果集对象
	 * @param stmt SQL处理对象
	 * @param conn 数据连接对象
	 */
	public static void closeAll(ResultSet rs,Statement stmt,Connection conn){
		try {
			if(rs!=null){
				rs.close();
				rs=null;
			}
		} catch (Exception e) {
			logger.error("关闭查询结果对象异常",e);
		}
		try {
			if(stmt!=null){
				stmt.close();
				stmt=null;
			}
		} catch (Exception e) {
			logger.error("关闭处理SQL语句对象异常",e);
		}
		try {
			if(conn!=null){
				conn.close();
				conn=null;
			}
		} catch (Exception e) {
			logger.error("关闭数据库连接异常",e);
		}
	}

	public static void main(String[] args) {
		Connection conn = getConnection();
		
		long start = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			conn = getConnection();
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		long end = System.currentTimeMillis();
		
		System.out.println((end - start));
	}
}


// 配置文件名“connpool.properties”,具体内容如下:


#数据库链接URL
url=dbc:oracle:thin:@192.168.0.8:1521:slcx
#数据库链接用户名和密码
username=用户名
password=密码

#url=dbc:oracle:thin:@10.0.0.14:1521:fetch
#username=用户名
#password=密码

#初始连接数大小
InitialLimit=2
#最小连接数
MinLimit=2
#最大链接数
MaxLimit=20
#不活动的超时时间
InactivityTimeout=1800
#被抛弃的链接超时
AbandonedConnectionTimeout=900
#属性检查相隔时间
PropertyCheckInterval=60
#链接等待超时时间
ConnectionWaitTimeout=100
#高速缓存的名称
ConnectionCacheName=slcx


0
0
分享到:
评论

相关推荐

    java oracle 数据库 连接池 小例子

    本示例是关于如何使用C3P0连接池来连接Oracle数据库的一个简单实例。C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。 首先,我们需要理解什么是数据库连接池。数据库连接...

    JAVA 使用数据库连接池连接Oracle数据库全代码

    ### JAVA 使用数据库连接池连接Oracle数据库全代码解析 #### 一、概述 本文将详细介绍如何在Java项目中使用Apache DBCP(Database Connection Pool)来连接Oracle数据库,并提供完整的示例代码。通过这种方式,我们...

    Tomcat_6.0配置oracle数据库连接池

    本文将详细讲解如何在Tomcat 6.0中配置Oracle数据库连接池。 首先,我们要明白连接池的基本原理。数据库连接池管理数据库连接,避免每次需要连接时都创建新的连接,而是复用已存在的连接,这样可以显著减少数据库...

    weblogic+Oracle数据库连接池的配置

    ### WebLogic与Oracle数据库连接池配置详解 #### 一、WebLogic Server 7.0 + Oracle JDBC Pool/DataSource配置步骤 在进行WebLogic Server 7.0与Oracle数据库的连接池配置时,需要确保以下几个方面的正确设置: #...

    tomcat6.0+oracle数据库连接池

    本篇文章将深入探讨如何在Tomcat 6.0应用服务器上配置Oracle数据库连接池,以及如何使用第三方DBCP(Database Connection Pool)库来实现这一目标。DBCP是一个开源的Java连接池实现,它为应用程序提供了一种有效管理...

    连接池管理连接oracle数据库

    这是用连接池技术管理连接oracle数据库的工具类代码,如果想连接MySQL,直接修改配置文件即可。

    oracle数据库连接池源码

    JDBC连接池 用JAVA写的连接数据库的代码 JDBC连接池 用JAVA写的连接数据库的代码

    Tomcat下对Oracle数据库连接池数据源的配置

    在IT领域,数据库连接池是优化应用程序性能的关键组件,它能有效地管理数据库连接,避免频繁地创建和销毁连接,从而提高系统的效率。本教程将详细解释如何在Tomcat服务器上配置Oracle 10g数据库的连接池数据源。 ...

    Spring boot连接oracle数据库JDBC配置步骤

    Spring Boot 连接 Oracle 数据库 JDBC 配置步骤 在本文中,我们将详细介绍如何使用 Spring Boot 连接 Oracle 数据库,配置 JDBC 驱动程序,并实现数据库的基本操作。 Step 1: 添加依赖项 在 Spring Boot 项目中,...

    Delphi免客户端直连Oracle数据库

    在描述中提到的“delphi10.01完整代码”,意味着这是一个使用Delphi 10.01版本编写的程序示例,它展示了如何在没有第三方组件的情况下连接到Oracle数据库。"oci.dll、oraocci11.dll、oraociei11.dll、orasql11.dll...

    数据库连接池查询

    在Oracle数据库中,可以通过以下命令调整`processes`参数: ```sql ALTER SYSTEM SET PROCESSES = value SCOPE = spfile; ``` 其中`value`表示新的最大连接数,`SCOPE = spfile`表示修改的参数将保存在初始化参数...

    geoserver2.14.0 oracle 数据库连接

    在GIS(地理信息系统)领域,GeoServer是一款广泛使用的开源服务器软件,它...记住,安全性和性能优化也是在实际操作中需要考虑的重要因素,例如定期更新JDBC驱动,合理配置数据库连接池,以及根据需要调整查询性能。

    数据库连接池在Oracle数据库中的实现.docx

    数据库连接池在Oracle数据库中的实现是一项关键的技术优化策略,它主要解决了基于JDBC(Java Database Connectivity)的应用程序在处理数据库连接时的效率问题。在传统的数据库应用中,每次请求都需要建立一个新的...

    数据库连接池在Oracle数据库中的实现.pdf

    数据库连接池在Oracle数据库中的实现是一项关键的技术优化,旨在提高应用程序与数据库之间的交互效率和资源利用率。数据库连接池技术允许程序复用已建立的数据库连接,而不是每次操作都创建新的连接,这显著降低了...

    易语言oracle数据库连接模块源码

    6. 连接池管理:如果涉及多线程或高并发环境,还会讲解如何实现连接池,以提高性能和资源利用率。 7. 安全性:讲解如何确保数据库操作的安全性,包括用户名、密码的加密传输,以及SQL注入的防范措施。 8. 性能优化...

    oracle 数据库,在C++中用连接池实现高速连接与访问.rar

    本话题将深入探讨如何在C++环境中利用连接池技术实现对Oracle数据库的高速连接与访问。 一、Oracle数据库基础 Oracle数据库提供了一套完整的数据管理解决方案,包括事务处理、数据仓库、网络数据库、安全性等。它的...

    C#高效数据库连接池源码

    自定义数据库连接池还可以考虑支持多种数据库类型,例如SQL Server、MySQL、Oracle等,通过泛型或接口实现对不同数据库的适配。 理解并掌握C#高效数据库连接池的实现,对于开发高性能的数据库应用至关重要。通过...

    数据库连接池 java 整理

    要使用数据库连接池连接到Oracle数据库,首先需要在项目中添加Oracle JDBC驱动的依赖。通常,这可以通过Maven或Gradle等构建工具完成。例如,在Maven的pom.xml文件中,可以添加以下依赖: ```xml &lt;groupId&gt;...

    利用python-oracledb库连接Oracledb数据库,使用示例

    python-oracledb的源码和使用示例代码, python-oracledb 1.0,适用于Python versions 3.6 through 3.10. Oracle Database; This directory contains samples for python-oracledb. 1. The schemas and SQL ...

Global site tag (gtag.js) - Google Analytics