2014-11-05 5 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(); 
} 
} 

Я использую CMD Windows:

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

+0

-classpath postgresql.jar это путь библиотеки? – otopba

+0

@otopba Не знаю. Каков результат 'jar tvvf postgresql.jar'? –

ответ

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 методы getConnection и getDrivers были расширены для поддержки механизма Provider Java Standard Edition Service. Драйверы JDBC 4.0 должны содержать файл META-INF/services/java.sql.Driver. Этот файл содержит имя реализации драйверов JDBC java.sql.Driver. Например, чтобы загрузить my.sql.Driver класс, файл META-INF/services/java.sql.Driver не будет содержать запись:

my.sql.Driver 

приложений больше не нужно загружать драйверы Явно JDBC с использованием Class.forName(). Существующие программы, которые в настоящее время загружают драйверы JDBC с использованием Class.forName(), будут продолжать работать без изменений.

+1

ДА! Это работает! Спасибо! – otopba

0

Необходимо связать драйвер с IDE. , если вы используете Netbeans, щелкните правой кнопкой мыши по библиотекам, добавьте jar/folder, затем перейдите к драйверу.

0

Если файл postgresql.jar не доступен для среды выполнения Java, то получит исключение «java.lang.ClassNotFoundException: org.postgresql.Driver».

Самый простой способ сделать драйвер postgresql jdbc доступным для ваших приложений - установить его как расширение Java. Единственное, что вам нужно сделать: - это cp, mv или ln файл postgresql.jar в каталоге расширения Java. Там не нужно устанавливать CLASSPATH, если вы это сделаете. Каталог расширения Java: $ JAVA_HOME/jre/lib/ext ($ JAVA_HOME в моей системе is /usr/java/jdk1.3) или для Windows C: \ Program Files \ Java \ jdk1.8.0_25 \ jre \ lib \ ext

Это делает жизнь ДЕЙСТВИТЕЛЬНО легкой; Мне больше не нужно было устанавливать CLASSPATH в моей среде!

Смежные вопросы