2012-12-15 83 views
0

我在使用Java和PostgreSQL數據庫連接時遇到了一些困難。我已經下載了JDBC4 Postgresql Driver, Version 9.2-1002驅動程序並正確設置了應用程序ClassPath。我的代碼下使用PostgreSQL和JDBC的ClassNotFoundException

import java.sql.*; 

public class JavaPostGreSQLConnectivity 
{ 
    public static void main(String[] args) 
    { 
     DB db = new DB();   
     db.dbConnect("jdbc:postgresql://127.0.0.1:5432/TestDB", "postgres","pwd"); 
    } 
} 

class DB 
{ 
    public DB() {} 

    public void dbConnect(String db_connect_string, String db_userid, String db_password) 
    { 
     try 
     { 
      Class.forName("org.postgresql.Driver"); 
      Connection conn = DriverManager.getConnection(db_connect_string, db_userid, db_password); 
      System.out.println("connected"); 

     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
}; 

運行後我收到以下錯誤

enter image description here

是不是在抱怨

的Class.forName( 「org.postgresql.Driver」) ;

如果是這樣,那麼驅動程序的名稱是什麼?不過,我按照this的學習目的。

但是,如果我做

C:\Program Files (x86)\Java\jdk1.7.0\bin>java -cp C:\Users\pos 
tgresql-9.2-1002.jdbc4.jar; JavaPostGreSQLConnectivity 

connected 

它works.Why我需要再次明確提及的驅動程序時,我已經把它放在類路徑是否正確?有沒有其他的方法(我只想把JAR文件放在Classpath中,程序應該從那裏讀取)?

在此先感謝

回答

2

驅動程序名稱是OK。它與驅動程序的official docs中提到的相同。因此,驅動程序只是不在類路徑中。

你說:

我[...]正確設置應用程序CLASSPATH

在另一方面,你僅僅通過調用啓動程序:

java JavaPostGreSQLConnectivity 

在這種情況下,沒有PG驅動程序在類路徑上。您可以通過使用手成纔像

java -cp postgresql-jdbc4.jar JavaPostGreSQLConnectivity 

編輯的問題,將其添加在打字,因此重複數據刪除已經改變。

您只在IDE中添加了jar。這有助於IDE編譯您的代碼。如果您使用IDE啓動程序,那麼IDE也會爲您設置類路徑。但是如果你不通過IDE啓動,那麼沒有人知道正確的類路徑,它必須手動設置。

的選項有:

  • 開始總是通過IDE
  • 做一些批處理腳本里面隱藏的類路徑的設置(常見的解決方案)
  • 設置CLASSPATH環境變量(不與其他擴展Java應用程序)
  • 生成一個「可執行jar」並在那裏設置類路徑。 (使用該術語搜索本網站)。
  • 將jar放入JVM自動拾取的位置(例如,在JRE的lib/ext目錄中)。但是污染JRE/JDK庫是最糟糕的選擇。

注意:這些都是基本的Java知識,與PostgreSQL無關。

+0

先生,那麼它是如何工作的SQL Server連接的情況? http://stackoverflow.com/questions/13891115/issue-in-jdbc-and-sql-server-connectivity。或者說,jTDS是如何工作的?我在問,因爲我需要知道這些東西,因爲我是java世界中的新來者 –

+0

也許你已經在其他場景中設置了'CLASSPATH'環境變量? –

相關問題