在Linux Java中动态加载类

时间:2013-06-13 10:07:26

标签: 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()},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 conector,如果是mysql等...

建议?

1 个答案:

答案 0 :(得分:1)

为什么不将连接器放入lib子目录,然后将此包含的所有jar传递给Java Class-Path?

样本文件夹树:

  • MyApp的
      • launcher.sh
      • MyApp.jar
    • LIB
      • 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.toURL,您必须执行File.toURI()。toURL()。