Linux-Java中的动态加载类

Linux-Java中的动态加载类,java,linux,windows,jdbc,urlclassloader,Java,Linux,Windows,Jdbc,Urlclassloader,我正在做一个学校项目,一个多平台分布式数据库系统 我需要从Java数据库中提取数据,以便动态加载jdbc连接器 在Windows中工作非常完美 但在Linux中,我遇到了一个错误: “未找到适合jdbc的驱动程序:mysql://..." 代码如下: File f = new File("mysql-connector-java-5.1.24-bin.jar"); URLClassLoader urlCl = new URLClassLoader(new URL[] { f.toURL()},S

我正在做一个学校项目,一个多平台分布式数据库系统

我需要从Java数据库中提取数据,以便动态加载jdbc连接器

在Windows中工作非常完美

但在Linux中,我遇到了一个错误:

“未找到适合jdbc的驱动程序:mysql://..."

代码如下:

File f = new File("mysql-connector-java-5.1.24-bin.jar");
URLClassLoader urlCl = new URLClassLoader(new URL[] { f.toURL()},System.class.getClassLoader());
Class conector = urlCl.loadClass("com.mysql.jdbc.Driver");
conector.newInstance();


Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/test","root",""); 
Statement instruccion = conexion.createStatement();
ResultSet tabla = instruccion.executeQuery("select * from prueba where uno=1");
while(tabla.next())
{
     System.out.println(tabla.getString(1));
     System.out.println(tabla.getString(2));
}

 conexion.close();
我不知道我能做什么

这样做是为了避免在每个站点上安装连接器

我为每个数据库传递一个配置文件,如果是postgresql,加载postgres jdbc Conctor,如果是mysql,等等


建议?

为什么不将连接器放入lib子目录,然后将其中包含的所有jar传递给Java类路径

示例文件夹树:

  • MyApp
    • 垃圾箱
      • launcher.sh
      • MyApp.jar
    • 解放党
      • myLib.jar
以下是launcher.sh脚本:

#!/bin/sh
#Set basedir
LAUNCHER_DIR=$(cd $(dirname $0); pwd)

#Set Java Class-Path
CLASSPATH="$LAUNCHER_DIR/bin/MyApp.jar"$(find "$LAUNCHER_DIR" -name '*.jar' -printf ":%p")

#Launch application
java -cp "$CLASSPATH" com.company.MyApp $*

编辑:不建议按照文档中的描述直接使用,您必须执行File.toURI().toul()。

如果应用程序需要连接到postgresql数据库,请不要向类路径添加任何内容,例如,只需加载jdbc连接器即可。整个应用程序使用套接字发送待办事项列表,这一个有用户、密码、数据库、连接器等。。。对于每个数据库,假设您第一次需要连接到Oracle数据库,只需发送连接器的jar,然后ToDo和您的任务就完成了。您不必正确安装jdbc连接器,明白我的意思吗?为什么不直接使用实例驱动程序?