1

我有一个处理 jdbc 的应用程序。它假设可以在任何有 JRE 的 PC 中使用,但它不假设使用将使用 -cp 命令行或更改他/她的类路径变量。所以用户在文件系统的某个地方有我的应用程序、JRE 和一个 jdbc 驱动程序。现在他或她输入一个数据库连接信息,包括jdbc驱动jar的路径,然后发出sql请求。问题是我现在不知道如何使 jdbc 驱动程序类可以在此应用程序中访问。与用户显式将驱动程序添加到类路径的方式相同。

4

3 回答 3

2

我刚刚为您的其他帖子更改了部分miks 答案

执行以下代码让我成功了。

import java.io.File;
import java.lang.reflect.Constructor;
import java.net.URL;
import java.net.URLClassLoader;

public class URLClassLoaderSample {
  public static void main( String [] args ) throws Exception {
    File f = new File( "/home/ravinder/Desktop/mysql-connector-java-5.1.18-bin.jar" );
    URLClassLoader urlCl = new URLClassLoader( new URL[] { f.toURL() }, System.class.getClassLoader() );

    Class mySqlDriver = urlCl.loadClass( "com.mysql.jdbc.Driver" );
    System.out.println( mySqlDriver.newInstance() );
    System.out.println( "Is this interface? = " + mySqlDriver.isInterface() );

    Class interfaces[] = mySqlDriver.getInterfaces();
    int i = 1;
    for( Class _interface : interfaces ) {
        System.out.println( "Implemented Interface Name " + ( i++ ) + " = " + _interface.getName() );
    } // for(...)

    Constructor constructors[] = mySqlDriver.getConstructors();
    for( Constructor constructor : constructors ) {
        System.out.println( "Constructor Name = " + constructor.getName() );
        System.out.println( "Is Constructor Accessible? = " + constructor.isAccessible() );
    } // for(...)
  } // psvm(...)
} // class URLClassLoaderSample

看到的输出如下:

com.mysql.jdbc.Driver@60aeb0
Is this interface? = false
Implemented Interface Name 1 = java.sql.Driver
Constructor Name = com.mysql.jdbc.Driver
Is Constructor Accessible? = false

And I don't understand what I should with log4jClass variable in my case *(com.mysql.jdbc.Driver)
让我希望你现在明白了。

于 2012-05-17T02:23:08.503 回答
1

在这种情况下,最好的解决方案是将所需的驱动程序与您的应用程序一起分发,并包含一个可执行包装器或一个相应地设置所需变量的 shell 脚本。这允许用户开箱即用地使用它,而不必弄乱任何复杂的配置,也不需要他们下载任何额外的文件。

于 2012-05-16T21:02:48.663 回答
0

嗯,jdbcClass.forName("org.postgresql.Driver");用来加载驱动。因此,一旦有了 jar 文件,并将其添加到类路径中,这部分就很容易了。只需将驱动程序 fqn 类名的散列保存到 jar 文件名即可。或者您可以扫描 jar 中的 Driver 类。

这是找到后如何将 jar 文件添加到类路径的便捷答案。

于 2012-05-16T21:23:49.907 回答