2013-10-07 142 views
2

我正在嘗試爲Java程序加載JDBC postgreSQL驅動程序。我知道這是遍佈互聯網。我嘗試了很多解決方案,但他們都沒有爲我工作。加載postgreSQL JDBC驅動程序

的問題是,我得到這個錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError:  
classes/com/freire/test/JDBCExample/class 
Caused by: java.lang.ClassNotFoundException: classes.com.freire.test.JDBCExample.class 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 

我的代碼如下所示:

package com.freire.test; 
import java.sql.DriverManager; 
import java.sql.Connection; 
import java.sql.SQLException; 

public class JDBCExample 
{ 
    public static void main(String[] argv) 
    { 
     System.out.println("JDBC Connection Testing"); 
     try { 
      Class.forName("org.postgresql.Driver"); 
     } catch (ClassNotFoundException e) { 
      System.out.println("PostgreSQL JDBC Driver not included!"); 
     } 
    } 
} 

而且我的項目的結構是這樣的:

myProject 
src 
    com 
    freire 
     test 
     JDBCExample.java 
classes 
    com 
    freire 
     test 
     JDBCExample.class 
lib 
    postgresql-9.2-1003.jdbc3.jar 

編譯工作正常:

java -d classes/ src/com/freire/test/JDBCExample.java 

但執行產生錯誤:

java classes/com/freire/test/JDBCExample 

值得一說,我在OS X山獅的工作。

任何幫助將不勝感激。

+0

當您編譯和運行程序時,您需要確保'postgresql-9.2-1003.jdbc3.jar'在類路徑中 – MadProgrammer

回答

4

首先,你需要使用.提包名稱,而不是/運行Java程序時:

轉到你的類目錄並運行JDBCExample爲:

java com.freire.test.JDBCExample 

但現在哭postgres驅動程序類沒有找到,因爲postgres jar在類路徑中缺少。因此,您需要在運行程序時使用classpath選項並將您的postgres jar添加到類路徑中:

和對於Windows:

java -cp .;../lib/postgresql-9.2-1003.jdbc3.jar com.freire.test.JDBCExample 

對於Linux:

java -cp .:../lib/postgresql-9.2-1003.jdbc3.jar com.freire.test.JDBCExample 
+0

我一直在嘗試這樣做,但未成功很長一段時間。我怎樣才能做到這一點? – ivantxo

+0

@ivantxo我在我的回答中提到了一切。只要使用我答案中提到的最後一個選項,你應該很好。 –

+0

謝謝,但這給了我一個java命令的用法選項列表。然後,幾行postgres-9.2.jdbc3.jar錯誤,如下所示:../lib/postgresql-9.2-1003.jdbc3.jar:第1行:未找到PK:命令或../lib/postgresql-9.2- 1003.jdbc3.jar:命令替換:第9行:語法錯誤:文件意外結束 – ivantxo

0

您需要確保PostgreSQL的-9.2-1003.jdbc3.jar是類路徑中,當你編譯和運行程序

嘗試使用

javac -cp lib/postgresql-9.2-1003.jdbc3.jar -d classes/ src/com/freire/test/JDBCExample.java 

編譯應用程序和

java -cp lib/postgresql-9.2-1003.jdbc3.jar;./classes com.freire.test.JDBCExample 

運行它...

NB作爲Juned指出,從技術上講,你不需要在類路徑中lib/postgresql-9.2-1003.jdbc3.jar引用,但考慮如何納入編譯時依賴的示範併發症進程內)

+0

由於驅動程序類僅在運行時加載,所以在編譯期間不需要jar。 –

+0

@JunedAhsan這將會如何? (是的,你是對的......認爲這是一個擴展練習彙編;)) – MadProgrammer

+0

它不會傷害,這就是爲什麼我沒有傷害你的負面投票;-) –

1

在Linux執行以下操作:

的javac -cp ':PostgreSQL的-9.1-901.jdbc4.jar' postgresjavatest.java

java -cp'。:postgresql-9.1-901.jdbc4。jar'postgresjavatest

它會爲您的jdbc驅動程序。確保jar文件位於同一位置