2013-06-13 132 views
0

我做一個學校項目分佈式數據庫系統動態加載類

一個多平臺的,我需要從數據中提取基地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連接器高,如果是MySQL的等...

建議?

回答

1

爲什麼不乾脆把連接器插入一個lib子目錄,然後通過包含在這一個Java類路徑的所有jar?

樣本文件夾樹:

  • 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()。

+0

的想法是沒有添加到類路徑,如果應用程序需要連接到比如PostgreSQL數據庫只是加載JDBC連接器,你就大功告成了。 整個應用程序使用套接字來發送待辦列表,這樣一個有用戶,密碼,數據庫,連接器,等等每個數據庫的 想象一下,你需要在第一時間連接到Oracle數據庫 只需發送連接器的罐子,然後將待辦事項和你做 您沒有正確安裝的JDBC連接器, 你明白我的意思? –

+0

爲什麼不直接使用instanciated驅動程序? – LoganMzz