动态加载jdbc驱动(可测试jdbc不同版本兼容性)
来源:互联网 发布:结构优化 编辑:程序博客网 时间:2024/05/16 11:12
缘由
接到一个新任务,需要测试应用对mysql jdbc不同版本驱动的兼容性。这里希望能够以代码的形式,手动加载不同版本的mysql jdbc驱动,比如有下列的驱动版本,我要一个一个进行测试:
- mysql-connector-java-5.1.6.jar
- mysql-connector-java-5.1.31.jar
- mysql-connector-java-5.1.35.jar
- mysql-connector-java-5.1.39.jar
- mysql-connector-java-6.0.3.jar
实现
参考stackoverflow上做法:
http://stackoverflow.com/questions/14478870/dynamically-load-the-jdbc-driver
觉得挺有意思的,写了如下代码,可以实现动态加载不同版本的jdbc驱动进行一些测试:
import java.net.URL;import java.net.URLClassLoader;import java.sql.Connection;import java.sql.Driver;import java.sql.DriverManager;import java.sql.DriverPropertyInfo;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.SQLFeatureNotSupportedException;import java.sql.Statement;import java.util.HashMap;import java.util.Map;import java.util.Properties;import java.util.logging.Logger;public class MycatMulitJdbcVersionTest { private static final String JDBC_URL = "jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC&useSSL=false"; private static final String USER = "root"; private static final String PASSWORD = "mysql"; private static final Map<String, String> jdbcVersionMap = new HashMap<String, String>(); private static final Map<String, Driver> tmpDriverMap = new HashMap<String, Driver>(); // 动态加载jdbc驱动 private static void dynamicLoadJdbc(String mysqlJdbcFile) throws Exception { URL u = new URL("jar:file:lib/" + mysqlJdbcFile + "!/"); String classname = jdbcVersionMap.get(mysqlJdbcFile); URLClassLoader ucl = new URLClassLoader(new URL[] { u }); Driver d = (Driver)Class.forName(classname, true, ucl).newInstance(); DriverShim driver = new DriverShim(d); DriverManager.registerDriver(driver); tmpDriverMap.put(mysqlJdbcFile, driver); } // 每一次测试完卸载对应版本的jdbc驱动 private static void dynamicUnLoadJdbc(String mysqlJdbcFile) throws SQLException { DriverManager.deregisterDriver(tmpDriverMap.get(mysqlJdbcFile)); } // 进行一次测试 private static void testOneVersion(String mysqlJdbcFile) { System.out.println("start test mysql jdbc version : " + mysqlJdbcFile); try { dynamicLoadJdbc(mysqlJdbcFile); } catch (Exception e1) { e1.printStackTrace(); } Connection conn = null; try { conn = DriverManager.getConnection(JDBC_URL, USER, PASSWORD); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select user()"); System.out.println("select user() output : "); while(rs.next()) { System.out.println(rs.getObject(1)); } rs = stmt.executeQuery("show tables"); System.out.println("show tables output : "); while(rs.next()) { System.out.println(rs.getObject(1)); } } catch (SQLException e) { e.printStackTrace(); } finally { if(conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } try { dynamicUnLoadJdbc(mysqlJdbcFile); } catch (SQLException e) { e.printStackTrace(); } System.out.println("end !!!"); System.out.println(); } public static void main(String[] args) { jdbcVersionMap.put("mysql-connector-java-6.0.3.jar", "com.mysql.cj.jdbc.Driver"); jdbcVersionMap.put("mysql-connector-java-5.1.6.jar", "com.mysql.jdbc.Driver"); jdbcVersionMap.put("mysql-connector-java-5.1.31.jar", "com.mysql.jdbc.Driver"); jdbcVersionMap.put("mysql-connector-java-5.1.35.jar", "com.mysql.jdbc.Driver"); jdbcVersionMap.put("mysql-connector-java-5.1.39.jar", "com.mysql.jdbc.Driver"); for(String mysqlJdbcFile : jdbcVersionMap.keySet()) { testOneVersion(mysqlJdbcFile); } }}class DriverShim implements Driver { private Driver driver; DriverShim(Driver d) { this.driver = d; } public boolean acceptsURL(String u) throws SQLException { return this.driver.acceptsURL(u); } public Connection connect(String u, Properties p) throws SQLException { return this.driver.connect(u, p); } @Override public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException { return this.driver.getPropertyInfo(url, info); } @Override public int getMajorVersion() { return this.driver.getMajorVersion(); } @Override public int getMinorVersion() { return this.driver.getMinorVersion(); } @Override public boolean jdbcCompliant() { return this.driver.jdbcCompliant(); } @Override public Logger getParentLogger() throws SQLFeatureNotSupportedException { return this.driver.getParentLogger(); }}
0 0
- 动态加载jdbc驱动(可测试jdbc不同版本兼容性)
- JDBC驱动加载程序
- 【JDBC】加载驱动异常
- JDBC驱动加载原理
- jdbc驱动加载失败
- JDBC驱动类加载
- JDBC驱动加载全过程
- jdbc加载驱动
- 自定义类加载器动态加载 JDBC 驱动
- 测试jdbc注册驱动
- jdbc 加载性能测试
- 高版本JDBC驱动加载的补充说明
- 测试 hibernate 性能 驱动 jdbc 数据库 版本 数据
- 关于java jdbc 动态加载驱动jar包
- Oracle12c jdbc版本驱动问题
- Oracle JDBC各个驱动版本
- JDBC应用:jdbc程序访问mysql如何加载jdbc驱动
- 加载JDBC驱动知多少!
- [C++]拓扑排序
- [gdc15]<暗黑破坏神3>中的合作模式设计
- ReLU激活函数:简单之美
- 小程序_201611
- marquee 和JS 滚动效果
- 动态加载jdbc驱动(可测试jdbc不同版本兼容性)
- 2733: [HNOI2012]永无乡
- java笔记(一)——枚举类
- 面向切面编程-原型
- struts2中定义拦截器对访问权限进行控制
- B-树关键字个数计算
- struts.xml 配置详解
- 勿以恶小而为之,勿以善小而不为
- noip2015 子串 dp