⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbconnectionmanager.java

📁 JSP开发的完整的网络商店.包含源代码和开发文档等
💻 JAVA
字号:
/*
 * Created on 2005-11-15
 * Author 曹汕
 * Version 1.0
 * Copyright by CS.SSPKU Inc. All rights reserved. 
 */
package com.struts.utils;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.*;
import java.util.*;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
 * @author cs
 * 
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
public class DBConnectionManager {
 

	private  static DBConnectionManager instance;
	private static int clients;
	DBConnectionPool pool =null;
	private Log log=LogFactory.getLog(this.getClass().getName());
	
	//DBConnetionManager的构造函数是私有函数,以避免其他类创建其实例。
	private DBConnectionManager() { 
		init(); 
	} 

	//	DBConnetionManager的客户调用getInstance()方法来得到该类的单一实例的引用。 
	//	单一的实例在第一次调用时创建,以后的调用返回该实例的静态应用。
	//	一个计数器纪录所有的客户数,直到客户释放引用。这个计数器在以后用来协调关闭连接池。
	public static synchronized  DBConnectionManager getInstance() { 

		if (instance == null) { 
			instance = new DBConnectionManager(); 
		} 
		clients++; 
		return instance; 
	} 
	
	// 一、初始化 
	// 构造函数调用一个私有的init()函数初始化对象。 
	private void init() { 
		InputStream is = null;
		try {
			is = new FileInputStream("d:\\Tomcat 5.0\\webapps\\struts\\WEB-INF\\classes\\Database.properties");
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		Properties dbProps = new Properties(); 
		try { 
			dbProps.load(is); 
		} 
		catch (Exception e) { 
			System.err.println("Can not read the properties file. " + "Make sure Database.properties is in the CLASSPATH"); 
			return; 
		}
	
		String logFile = dbProps.getProperty("logfile", "DBConnectionManager.log"); 

		loadDrivers(dbProps); 
		createPools(dbProps); 
	} 

	//	方法getResourceAsStream()是一个标准方法,用来打开一个外部输入文件。
	//	文件的位置取决于类加载器,而标准的类加载器从classpath开始搜索。
	//	Db.properties文件是一个Porperties格式的文件,保存在连接池中定义的key-value对。
	//	下面一些常用的属性可以定义: 
	//	   drivers 以空格分开的jdbc驱动程序的列表 
	//	   logfile 日志文件的绝对路径 
	//	  每个连接池中还使用另一些属性。这些属性以连接池的名字开头: 
	//	   .url数据库的JDBC URL 
	//	   .maxconn最大连接数。0表示无限。 
	//	   .user连接池的用户名 
	//	   .password相关的密码 
	//	  url属性是必须的,其他属性可选。用户名和密码必须和所定义的数据库匹配。 
	/**
	 * 方法loadDrivers()将指定的所有jdbc驱动程序注册,装载
	 * @param props
	 */
	private void loadDrivers(Properties props) { 

		String driverClass = props.getProperty("DB.DriverName").trim(); 
		try { 
			Driver driver = (Driver)Class.forName(driverClass).newInstance(); 
			DriverManager.registerDriver(driver); 
			log.info("Registered JDBC driver " + driverClass); 
		} 
		catch (Exception e) { 
			log.info("Can not register JDBC driver: " + 	driverClass + ", Exception: " + e); 
		} 
	} 


	private void createPools(Properties props) { 
		String url = props.getProperty( "DB.Url");
		String user = props.getProperty( "DB.User"); 
		String password = props.getProperty("DB.Pwd"); 
		String maxconn = props.getProperty( "DB.MaxConnections"); 
		int max; 
		try { 
			max = Integer.valueOf(maxconn).intValue(); 
		} 
		catch (NumberFormatException e) { 
			log.info("Invalid maxconn value " + maxconn); 
			max = 0; 
		} 
		String poolName="OracleDB Pool";
		pool =	new DBConnectionPool(url, user, password, max);
	} 
	
	/**
	 * DBConnectionManager提供getConnection()方法和freeConnection方法,这些方法有客户程序使用。
	 * 所有的方法以连接池名字所参数,并调用特定的连接池对象。
	 * @param  poolName 连接池名字
	 * @return Connection
	 */

	public Connection getConnection() { 
	if (pool != null) { 
		return pool.getConnection(); 
	} 
	return null; 
	} 

	public void freeConnection(Connection con) { 
		if (pool != null) { 
			pool.freeConnection(con); 
		} 
	} 
	
	//	最后,由一个release()方法,用来完好地关闭连接池。
	//	每个DBConnectionManager客户必须调用getInstance()方法引用。
	//	有一个计数器跟踪客户的数量。方法release()在客户关闭时调用,计数器减1。
	//	当最后一个客户释放,DBConnectionManager关闭所有的连接池。 

	public synchronized void release() { 
	// Wait until called by the last client 
		if (--clients != 0) { 
			return; 
		} 
		pool.release(); 
	} 



}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -