近来项目需要从外部加载 JABC JAR 包 , 访问多个数据库,有可能是 oracle 7 、 oracle9 、 db2 9 、 db2 10 。同一个数据库不能的版本之间 JAR 包可能不能通用,但接口不变,所以需要从外部加载相应 jar 包
URL url = new URL ( "file:/" + Jar 路径 );
URLClassLoader myClassLoader = new URLClassLoader(
new URL [] { url }, Thread.currentThread ()
.getContextClassLoader());
Class myClass = myClassLoader.loadClass(driver);
Driver driver = (Driver) myClass.newInstance();
Connection conn =Driver .connect(uri, info);
长期以来一直用 对 JDBC 一直是 DriverManager.getConnection(url,user,password) ,这个公式化的东西,一直都这么用。
Drivermanager. registerDriver
(Driver driver)
注册驱动 在运行时一直找不到适合的驱动。虽然注册了 但在后面的操作过程中,dm 是从系统级加载中寻找,而不是从线程级加载中查找。
最后还是只用Driver 来获取连接,脑子神经了下,是不是所有数据库都能这样写 比如MYSQL 那么多参数 怎么写 是所有数据库 Preperties 用户名 密码都是 user/password 吗?
connect (String url, Properties info) |
在 DriverManager 里这是这写的
java.util.Properties info = new java.util.Properties();
if (user != null ) {
info.put( "user" , user);
}
if (password != null ) {
info.put( "password" , password);
}
Connection result = di.driver.connect(url, info);
区别就是 DriverManager 里面是 synchronized 方法。这下子放心了。