package com.meidusa.amoeba.jdbc; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverPropertyInfo; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.util.Properties; import java.util.logging.Logger; import com.alibaba.china.jdbc.common.CharsetParameter; import com.alibaba.china.jdbc.factory.ProxyFactory; import com.meidusa.amoeba.util.JVM; /** * <pre> * 针对Oracle JDBC Driver的wrapper,主要解决编码转换等问题 * 载入驱动类:Class.forName("com.alibaba.china.jdbc.SimpleDriver") * URL连接格式:jdbc:oracle:thin:@10.0.65.55:1521:ocndb * </pre> * * @author hexianmao 2007 四月 6 11:38:25 */ public class DriverWrapper implements Driver { private ProxyFactory factory = new com.alibaba.china.jdbc.factory.SimpleProxyFactory(); private Driver driver; private String clientEncoding; private String serverEncoding; public String getClientEncoding() { return clientEncoding; } public void setClientEncoding(String clientEncoding) { this.clientEncoding = clientEncoding; } public String getServerEncoding() { return serverEncoding; } public void setServerEncoding(String serverEncoding) { this.serverEncoding = serverEncoding; } public ProxyFactory getFactory() { return factory; } public Driver getDriver() { return driver; } public void setFactory(ProxyFactory factory) { this.factory = factory; } public void setDriver(Driver driver) { this.driver = driver; } public DriverWrapper(){ } /** * <pre> * 检索驱动程序是否认为它可以打开到给定 URL 的连接。 * 注意该方法在#DriverManager.getDriver(String)中被调用,用来取得相应的driver。 * </pre> */ public boolean acceptsURL(String url) throws SQLException { return driver.acceptsURL(url); } /** * 试图创建一个到给定 URL 的数据库连接。 */ public Connection connect(String url, Properties info) throws SQLException { Properties p = new Properties(); p.putAll(info); Connection conn = driver.connect(url, p); CharsetParameter param = new CharsetParameter(); param.setClientEncoding(this.getClientEncoding()); param.setServerEncoding(this.getServerEncoding()); return factory.getConnection(param, conn); } /** * 检索此驱动程序的主版本号。 */ public int getMajorVersion() { return driver.getMajorVersion(); } /** * 获得此驱动程序的次版本号。 */ public int getMinorVersion() { return driver.getMajorVersion(); } /** * 获得此驱动程序的可能属性信息。 */ public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException { return driver.getPropertyInfo(url, info); } /** * 报告此驱动程序是否是一个真正的 JDBC CompliantTM 驱动程序。 */ public boolean jdbcCompliant() { return driver.jdbcCompliant(); } //following codes for jdk 1.7 public Logger getParentLogger() throws SQLFeatureNotSupportedException { if (JVM.is17()) { return ClassWrapperUtil.invoke(driver, Logger.class, "getParentLogger", (Object[])null, (Class[])null); } else { throw new UnsupportedOperationException(); } } }