📄 commondriver.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 + -