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

📄 commondriver.java

📁 如何连接企业oracle
💻 JAVA
字号:
/*
 * 创建日期 2003-11-18
 */
package com.dingl.jdbc;

import java.io.BufferedInputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.DriverPropertyInfo;
import java.sql.SQLException;
import java.util.Properties;

/**
 * @author 丁令(令少爷) http://www.DingL.com
 *
 * 驱动类
 */
public class CommonDriver implements Driver {

	static final String CONFIG_FILE = "/drivers.properties";

	boolean registered = false;

	/**
	 * 数据库类型
	 * */
	String dbtype = null;

	/**
	 * 各驱动厂商提供的URL
	 * */
	String realUrl = null;

	/**
	 * 各数据库的驱动配置
	 * 包括:驱动类及URL格式
	 * 
	 * 如:
	 * oracle.driver=oracle.jdbc.OracleDriver
	 * oracle.url=jdbc:oracle:thin:@host-name:port:database-name
	 * 
	 * */
	Properties drivers = null;

	/**
	 * 我自己定义的URL参数
	 * */
	Properties parameters = null;

	static {
		try {
			DriverManager.registerDriver(new CommonDriver());
		} catch (java.sql.SQLException E) {
			throw new RuntimeException("Can't register the driver!");
		}
	}

	/**
	 * 构造方法
	 * */
	public CommonDriver() {
		drivers = new Properties();
		BufferedInputStream bufferedInputStream = null;

		try {
			bufferedInputStream = new BufferedInputStream(getClass().getResourceAsStream(CONFIG_FILE));
			drivers.load(bufferedInputStream);
		} catch (java.io.IOException ioe) {
			throw new RuntimeException("Can't read the config file : " + CONFIG_FILE);
		} finally {
			try {
				bufferedInputStream.close();
			} catch (Exception ee) {
			}
		}
	}

	/**
	 * 处理URL
	 * 我自己的URL格式:
	 * jdbc:common/dbtype=oracle&host=ddd&port=1521&dbname=sid&useTrim=yes&charset=GBK
	 * */
	private void urlProcess(String commonUrl) throws SQLException {
		Url url = new Url(commonUrl, drivers);
		dbtype = url.getDatabaseType();

		if (!inConfigure(dbtype)) {
			throw new SQLException("unknown database type : " + dbtype);
		}

		if (!registered) {
			registerDriver();
			registered = true;
		}

		realUrl = url.getRealUrl();
		parameters = url.getParameter();
	}

	/**
	 * 配置文件中是否有当前数据库的驱动配置
	 * */
	private boolean inConfigure(String dbtype) {
		return drivers.containsKey(dbtype + ".driver") && drivers.containsKey(dbtype + ".url");
	}

	/**
	 * 注册驱动
	 * */
	private void registerDriver() throws SQLException {
		String dv = drivers.getProperty(dbtype + ".driver");

		try {
			DriverManager.registerDriver((Driver) Class.forName(dv).newInstance());
		} catch (InstantiationException e) {
			throw new SQLException("Can't instance JDBC driver class : " + dv);
		} catch (IllegalAccessException e) {
			throw new SQLException("Can't access JDBC driver class : " + dv);
		} catch (ClassNotFoundException e) {
			throw new SQLException("Can't find JDBC driver class : " + dv);
		}
	}

	/* (非 Javadoc)
	 * @see java.sql.Driver#connect(java.lang.String, java.util.Properties)
	 */
	public Connection connect(String url, Properties info) throws SQLException {
		if (realUrl == null)
			urlProcess(url);
		Driver d = null;
		boolean self = true;
		while (self) {
			d = DriverManager.getDriver(realUrl);
			if (!(d instanceof CommonDriver)) {
				self = false;
			}
		}

		Connection conn = d.connect(realUrl, info);
		return new CommonConnection(conn, parameters);
	}

	/* (非 Javadoc)
	 * @see java.sql.Driver#getMajorVersion()
	 */
	public int getMajorVersion() {
		return 1;
	}

	/* (非 Javadoc)
	 * @see java.sql.Driver#getMinorVersion()
	 */
	public int getMinorVersion() {
		return 0;
	}

	/* (非 Javadoc)
	 * @see java.sql.Driver#jdbcCompliant()
	 */
	public boolean jdbcCompliant() {
		return true;
	}

	/* (非 Javadoc)
	 * @see java.sql.Driver#acceptsURL(java.lang.String)
	 */
	public boolean acceptsURL(String url) throws SQLException {
		return url.startsWith("jdbc:common");
	}

	/* (非 Javadoc)
	 * @see java.sql.Driver#getPropertyInfo(java.lang.String, java.util.Properties)
	 */
	public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException {
		return null;
	}
}

⌨️ 快捷键说明

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