JDBCUdało mi się połączyć bazę danych PostgreSQL z .NET. Dostałem zapytanie czy to samo mogę zrobić używając Javy i JDBC. Można. Cały proces przygotowania tego wpisu był dużo przyjemniejszy. W .NET z tego co wiem nie ma gotowych sterowników do PostgreSQL ,a użycie w tym wypadku ODBC wymaga przejścia kilku okienek dialogowych. W Javie ten proces jest łatwiejszy.

Oto więc jak połączyć się z PostgreSQL używając sterownika JDBC.

Pobierz najpierw bibliotekę z tej strony http://jdbc.postgresql.org/download.html

Add External Jar

Załącz ją do projektu.

JDBC Project

Kod połączenia do bazy jest następujący.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Test {

    public static void main(String[] args) throws SQLException {

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

            Connection connection = null;

            //  "jdbc:postgresql://nazwahosta:port/nazwabazy","uzytkownik", "haslo"
            connection = DriverManager.getConnection(
                    "jdbc:postgresql://localhost:5432/postgres","postgres", "mojehaslo");

            connection.close();    

        } catch (ClassNotFoundException e) {

            e.printStackTrace();
            System.out.append("Nie masz sterownika");
        }
        catch (SQLException e )
        {
            e.printStackTrace();
            System.out.append("Zle dane");
        }
    }
}

Metoda getConnection przyjmuje trzy parametry. Pierwszy parametr to string określający nazwę hosta, rodzaj systemu  i nazwę bazy.

“jdbc:postgresql://nazwahosta:port/nazwabazy",

Pozostałe parametry określają uwierzytelnienie do bazy.

"uzytkownik", "haslo"

PostgreSQL mam zainstalowanego lokalnie (ze standardowym ustawieniami) więc moja ścieżka jest następująca.

DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres","postgres", "haslo");

Samo połączenie jest bezużyteczne dlatego postanowiłem z bazy Postgresql wyciągnąć informację o wszystkich bazach w moim systemie.

pb_database

Tabelka  pg_database jest tabelą systemową i powinna ona istnieć zawsze. Wykonałem do niej zapytanie w przykładzie .NET i teraz zrobię to samo w Javie.

public static void main(String[] args) throws SQLException {

    Statement statement = null;
    Connection connection = null;

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

        //  "jdbc:postgresql://nazwahosta:port/
        //   nazwabazy","uzytkownik", "haslo"
        connection = DriverManager.getConnection(
                "jdbc:postgresql://localhost:5432" +
                "/postgres","postgres", "haslo");

        String selectTableSQL = "SELECT datname, datallowconn FROM pg_database;";
        statement = connection.createStatement();

        System.out.println(selectTableSQL);

        // wykonywanie SQL
        ResultSet rs = statement.executeQuery(selectTableSQL);

        while (rs.next()) {

            String databaseName = rs.getString("datname");
            String allowConnection = rs.getString("datallowconn");

            System.out.println("Database Name : " + databaseName);
            System.out.println("Allow Connection: " + allowConnection);

        }
    } catch (ClassNotFoundException e) {

        e.printStackTrace();
        System.out.append("Nie masz sterownika");
    }
    catch (SQLException e )
    {
        e.printStackTrace();
        System.out.append("Zle dane");
    }
    finally {
        if (statement != null) {
            statement.close();
        }

        if (connection != null) {
            connection.close();
        }
    }
}

Powyższy kod wydrukuje w konsoli wszystkie dostępne bazy w systemie PostgreSQL jak i informację o możliwości połączenia.

SELECT datname, datallowconn FROM pg_database;
Database Name : template1
Allow Connection: t
Database Name : template0
Allow Connection: f
Database Name : postgres
Allow Connection: t
Database Name : test
Allow Connection: t

To wszystko. Miłego Programowania.