Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从正在运行的插件在运行时加载类_Java_Eclipse - Fatal编程技术网

Java 从正在运行的插件在运行时加载类

Java 从正在运行的插件在运行时加载类,java,eclipse,Java,Eclipse,我有一个连接到数据库的插件。我不想在插件中捆绑驱动程序的jar。相反,我想从users项目中获取它,并在运行时加载它。下面是我用来实现同样目的的代码。 我收到错误“找不到合适的驱动程序……” 请指出可能的错误 jPrj——是我要从中加载驱动程序类的项目的IJavaProject对象。 数据库类型--“mysql” final String[]classPathEntries=JavaRuntime.ComputedDefaultRuntimeClassPath(jPrj); for(int i=

我有一个连接到数据库的插件。我不想在插件中捆绑驱动程序的jar。相反,我想从users项目中获取它,并在运行时加载它。下面是我用来实现同样目的的代码。 我收到错误“找不到合适的驱动程序……” 请指出可能的错误

jPrj——是我要从中加载驱动程序类的项目的IJavaProject对象。 数据库类型--“mysql”

final String[]classPathEntries=JavaRuntime.ComputedDefaultRuntimeClassPath(jPrj);
for(int i=0;i

我不确定如何将clazz用于DriverManager.getConnection。在本例中,请查看以下讨论

我相信你的情况与此相似。仔细检查您正在使用的JDBCURL


顺便说一句,请注意,您的代码中不包含实际引发异常的代码(
DriverManager.getConnection()
),而且它的主题非常混乱。如果您重新定义主题,如“在JDBC连接期间未找到合适的驱动程序”,您可以在一秒钟内找到链接的讨论

您确定您的异常是从第
Class.forName(…)
行引发的吗?不,这一行有效,异常来自DriverManager.getConnection(…)…而且我不应该使用Class.forName,而是需要使用loder.loadClass…即使在这种情况下,DriverManager.getConnection也会提供例外情况。如果我在插件中添加所需的jar并使用Class.forName()和DriverManager.getConnection,我的代码也会工作……我希望它能够工作,而不必将该jar与插件捆绑在一起,而是从项目类路径加载它
final String[] classPathEntries = JavaRuntime.computeDefaultRuntimeClassPath(jPrj);
for (int i = 0; i < classPathEntries.length; i++) {
    final String entry = classPathEntries[i];
    if (entry.contains(databaseType)) {
        final IPath path = new Path(entry);
        final URL url = path.toFile().toURI().toURL();
        urlList.add(url); //the value of url at this point is-- file:/C:/.../mysql-connector-java-5.1.15-bin.jar -- the path on my disk
        final ClassLoader parentClassLoader = jPrj.getClass().getClassLoader();
        final URL[] urls = urlList.toArray(new URL[urlList.size()]);
        final URLClassLoader classLoader = new URLClassLoader(urls, parentClassLoader);
        try {
            final ClassLoader loader = new URLClassLoader(urls);
            loader.loadClass("com.mysql.jdbc.Driver"); 
            Class<?> clazz = loader.loadClass("java.sql.DriverManager");
        } catch (final ClassNotFoundException ex) {
            ex.printStackTrace();
        }
        break;
    }
}
DriverManager.getConnection("jdbc:mysql://localhost:port/myDB", myuser, mypaswrd); //-- get exception from here