Не найдено подходящих драйверов для jdbc: postgresql://192.168.1.8: 5432/NexentaSearch

Я написал следующую программу java

import java.io.*;
import java.util.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.*;

public class Sample {
    public static void main (String[] args) throws IOException  {
                    int CountComputers;
            FileInputStream fstream = new FileInputStream(
                    "/export/hadoop-1.0.1/bin/countcomputers.txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
            String result=br.readLine();
            CountComputers=Integer.parseInt(result);
            input.close();
            fstream.close();
            Connection con = null;
            Statement st = null;
                ResultSet rs = null;    
               String url = "jdbc:postgresql://192.168.1.8:5432/NexentaSearch";
                String user = "postgres";
                String password = "valter89";
            ArrayList<String> paths = new ArrayList<String>();
            try
            {
                con = DriverManager.getConnection(url, user, password);
                        st = con.createStatement();
                        rs = st.executeQuery("select path from tasks order by id");
                while (rs.next()) { paths.add(rs.getString(1)); };
                PrintWriter zzz = null;
                    try
                    {
                            zzz = new PrintWriter(new FileOutputStream("/export/hadoop-1.0.1/bin/readwaysfromdatabase.txt"));
                    }
                    catch(FileNotFoundException e)
                    {
                            System.out.println("Error");
                            System.exit(0);
                    }
                    for (int i=0; i<paths.size(); i++)
                {
                    zzz.println("paths[i]=" + paths.get(i) + "\n");
                    }
                    zzz.close();

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

Я скомпилировал эту программу и создал файл jar

./javac -classpath /folder/postgresql-8.4-703.jdbc3.jar -d /Samplejavaprogram/classes /Samplejavaprogram/src/Sample.java
./jar -cvf /Samplejavaprogram/Sample.jar -C /Samplejavaprogram/classes/ .

Jar имеет следующий файл манифеста

Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)
Main-Class: Sample
Class-Path: /folder/postgresql-8.4-703.jdbc3.jar

также содержит файл /folder/postgresql -8.4-703.jdbc3.jar. Я запустил Sample.jar с помощью команды

./java -jar -Djava.library.path=/opt/jdk1.7.0_06/lib /Samplejavaprogram/Sample.jar

и в результате я получил следующие сообщения

Connection Failed! Check output console
java.sql.SQLException: No suitable driver found for jdbc:postgresql://192.168.1.8:5432/NexentaSearch
    at java.sql.DriverManager.getConnection(DriverManager.java:604)
    at java.sql.DriverManager.getConnection(DriverManager.java:221)
    at org.myorg.Sample.main(Sample.java:33)

Я запустил файл с хоста с адресом 192.168.1.10, а на хосте 192.168.1.8 он выполнялся нормально. Помогите устранить ошибку.

Ответ 1

Используется драйвер JDBC 3. Драйверы JDBC 4 загружаются автоматически, загружаются с помощью DriverManager, тогда как JDBC 3 - нет. Поэтому вам нужно вызвать

Class.forName("org.postgresql.Driver");

один раз в вашем приложении (до вызова DriverManager#getConnection).


В качестве альтернативы вы можете использовать драйвер JDBC 4 PostgreSQL из здесь, который не требует вышеупомянутого вызова метода.

Ответ 2

Просто используйте команду jar, чтобы извлечь файлы, необходимые вашему приложению для соединения с сервером базы данных. например jar -xf jdbc_file. Скомпилируйте его с помощью javac -cp. и запустите его с помощью java -cp.

И что это. Он будет работать.