2014-11-05 28 views
2

我有簡單的類。然後我嘗試編譯並運行它,我看到ClassNotFoundException。Class.forName(「org.postgresql.Driver」)error

import java.sql.*; 

public class DBProcessor{ 

private static String serverAdres = "127.0.0.1:5432"; 

private static String DBname = "dota"; 
private static String clientName = "postgres"; 
private static String password = "master"; 
private static Connection connection; 

public static void connect() { 
    try { 
     Class.forName("org.postgresql.Driver"); 
    } catch (ClassNotFoundException e) { 
     System.err.println("Where is your PostgreSQL JDBC Driver? " 
       + "Include in your library path!"); 
     e.printStackTrace(); 
    } 

    try { 
     connection = DriverManager.getConnection("jdbc:postgresql://" + serverAdres + "/" + DBname, clientName, password); 

    } catch (SQLException e) { 
     System.err.println("Connection Failed! Check output console"); 
     e.printStackTrace(); 
    } 

    if (connection == null) { 
     System.err.println("Failed to make connection!"); 
    } 
} 

public static void main(String[] args){ 
    DBProcessor db = new DBProcessor(); 
    db.connect(); 
} 
} 

我使用Windows CMD:

C:\rmi2>javac -classpath postgresql.jar DBProcessor.java 
C:\rmi2>java DBProcessor 
Where is your PostgreSQL JDBC Driver? Include in your library path! 
java.lang.ClassNotFoundException: org.postgresql.Driver 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Unknown Source) 
at DBProcessor.connect(DBProcessor.java:12) 
at DBProcessor.main(DBProcessor.java:34) 
Connection Failed! Check output console 
java.sql.SQLException: No suitable driver found for jdbc:postgresql://127.0.0.1: 
5432/dota 
at java.sql.DriverManager.getConnection(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at DBProcessor.connect(DBProcessor.java:20) 
at DBProcessor.main(DBProcessor.java:34) 
Failed to make connection! 

我做錯了嗎? 所以,這是postgrsql庫https://www.dropbox.com/s/idx5l0kub5rn1b8/postgresql.jar?dl=0

+3

解釋:PostgreSQL JDBC驅動程序在哪裏?你是否包含在你的圖書館路徑中? – kolossus 2014-11-05 20:51:35

+0

-classpath postgresql.jar它是庫路徑? – otopba 2014-11-05 20:54:14

+0

@otopba不知道。 'jar tvvf postgresql.jar'的結果是什麼? – 2014-11-05 20:56:28

回答

5

在命令行中,這

java DBProcessor 

應該

java -cp .;postgresql.jar DBProcessor 

而且,因爲它包括java.sql.Driver,當你有工作,你可以刪除

// try { 
// Class.forName("org.postgresql.Driver"); 
// } catch (ClassNotFoundException e) { 
// System.err.println("Where is your PostgreSQL JDBC Driver? " 
//   + "Include in your library path!"); 
// e.printStackTrace(); 
// } 

根據DriverManager的Javadoc,

DriverManager方法getConnectiongetDrivers已得到增強,支持Java標準版服務提供商的機制。 JDBC 4.0驅動程序必須包含文件META-INF/services/java.sql.Driver。該文件包含java.sql.Driver的JDBC驅動程序實現的名稱。例如,加載my.sql.Driver類中,META-INF/services/java.sql.Driver文件將包含項:

my.sql.Driver 

應用程序不再需要使用Class.forName()顯式地加載JDBC驅動程序。當前使用Class.forName()加載JDBC驅動程序的程序將繼續工作而不進行修改。

+1

是的!其作品!謝謝! – otopba 2014-11-05 21:02:03

0

您需要將驅動程序鏈接到您的IDE。 如果您使用Netbeans,請右鍵單擊庫,添加jar /文件夾,然後瀏覽至驅動程序。

0

如果postgresql.jar文件對Java運行時環境不可訪問,那麼您的 將得到'java.lang.ClassNotFoundException:org.postgresql.Driver'異常。

使您的 應用程序可以訪問postgresql jdbc驅動程序的最簡單方法是將其安裝爲Java擴展。你需要做的唯一的事情就是將cp,mv或者postgresql.jar文件放到Java擴展目錄中。如果你這樣做, 不需要設置CLASSPATH。 Java擴展目錄是$ JAVA_HOME/jre/lib/ext(我係統上的$ JAVA_HOME 是/usr/java/jdk1.3)或Windows C:\ Program Files \ Java \ jdk1.8.0_25 \ jre \ lib \ ext

這使生活非常容易;我再也不用在我的環境中設置CLASSPATH了!