PostgreSQL installieren und für entfernte JDBC Zugriffe konfigurieren
Heute habe ich mal wieder eine PostgreSQL Datenbank zum aufgesetzt, um ein wenig mit JDBC und JPA zu experimentieren. Wie immer fange ich dann an nach einem Tutorial zu suchen, in dem erklärt wird wie der Datenbankserver einzurichten ist, damit ich von entfernten Rechneren aus damit arbeiten kann. So lässt sich der Server bequem in einer VM installieren und ich kann vom Host aus entwickeln.
In diesem Artikel wird zuerst die Installation und Konfiguration der PostgreSQL Datenbank beschrieben und anschließend wie man damit über JDBC arbeitet. Dazu wird die Eclipse “Database Development” Erweiterung eingerichtet und eine JDBC Template für Java-Anwendungen gezeigt.
Diesmal habe ich mich für ein Ubuntu als OS für den Datenbankhost entschieden. Zum installieren genügt es folgende Zeile in die Shell zu hacken.
sudo apt-get install postgresql
Anschließend wird in /etc/postgresql/8.3/main/pg_hba.conf ein 192.168.1.0/24 Netz als Quelle von möglichen Verbindungen hinzugefügt.
# IPv4 local connections: host all all 192.168.1.0/24 md5 host all all 127.0.0.1/32 md5
Und in der Daten /etc/postgresql/8.3/main/postgresql.conf noch die IPs angegeben, auf denen der Server TCP-Verbindungen entgegen nimmt (Hier von allen verfügbaren).
listen_addresses = '*'
Nach einem Neustart von PostgreSQL oder Nachladen der aktuellen Konfiguration kann nun von allen Rechnern aus dem 192.168.1.0/24er Netz zugegriffen werden.
Als nächstes richte ich einen Testbenutzer und eine Testdatenbank ein, womit der Konfigurationsteil dieses Artikels ended.
sudo -u postgres createuser -D -A -P testuser
sudo -u postgres createdb -O testuser testdb
Quelle: Ubuntu Community
Zugriff über JDBC aus Eclipse
Um eine JDBC-Verbindung zu dem vorher eingerichteten Server aufzubauen, werde ich an dieser Stelle Eclipse mit den “Database Development” Erweiterungen verwendet. Zuerst muss der zur eingesetzten Java-Version passender PostgreSQL JDBC-Treiber heruntergeladen werden. Dann in Eclipse in die “Database Development”-Perspektive wechseln und mit einem Rechtsklick auf “Database Connections” eine neue Verbindung anlegen. In unserem Fall handelt es sich um eine PostgreSQL Datenbank.

Es öffnet sich ein Dialog, in dem wir zuerst einen Treiber auswählen sollen. Dazu den Cursor über das linke, meiner Meinung nach nicht selbsterklärende, Symbol bringen und die linke Taste auf der Maus betätigen.

Sofort wird bemängelt, das die Voreingestellt JAR-Datei mit dem JDBC Treiber nicht gefunden wurde.

Wir beheben den Fehler, indem wir den heruntergeladenen Treiber in die “Jar List” aufnehmen und den Fehlenden einfach entfernen.

Nun können die Verbindungsparameter entsprechend dem eigenen Umfeld angegeben werden. Sprich IP des DB-Servers, Datenbank und Benutzername.

Das wars! Mit “Test Connection” kann geprüft werden, ob mit den angegebenen Parametern eine Verbindung aufgebaut werden kann.
JDBC-Zugriff aus Anwendung
Die angegebenen Verbindungsdaten können nun in ein JDBC-Template eingesetzt werden, um auch aus Java-Anwendungen heraus mit der Datenbank zu arbeiten.
public class JDBCConnection {
public static void main(String[] args) {
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
System.out.println("Driver did not load");
System.exit(-1);
}
Connection con = null;
try {
String url = "jdbc:postgresql://192.168.1.100/testdb";
con = DriverManager.getConnection(url, "testuser", "testuser");
} catch (SQLException e) {
System.out.println("Couldn't connect");
e.printStackTrace();
System.exit(-1);
}
try {
Statement stmt = con.createStatement();
String query = "SELECT * from table";
ResultSet rs = stmt.executeQuery(query);
System.out.println("Query Result: ");
while (rs.next()) {
System.out.println("Something");
}
System.out.println();
} catch (SQLException e) {
System.out.println("Something else is wrong");
System.exit(-1);
}
}
}