gpt4 book ai didi

java - 在运行时从文件系统加载类到应用程序

转载 作者:行者123 更新时间:2023-11-29 05:59:46 24 4
gpt4 key购买 nike

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

最佳答案

我只是修改了 miks answer 的一部分对于您的其他帖子。

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

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

而且我不明白在我的案例中我应该如何使用 log4jClass 变量 *(com.mysql.jdbc.Driver)
希望您现在明白了。

关于java - 在运行时从文件系统加载类到应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10626619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com