# JDBC Verbindung mit Postgresql



## blade (26. Mrz 2010)

Hallo, ich versuche seit ein paar Stunden eine JDBC-Verbindung zu einer Postgresql DB herzustellen.

Hierzu fehlen mir aber noch ein paar Grundlagen.
Ich habe mir das JDBC Paket von Postgres runtergeladen.

Hier habe ich gelesen das man das Paket aber nicht direkt einbinden soll.
Denke das damit gemeint ist das ich das Paket nicht unter Propertys --> libraries--> add Library Importieren soll.
(Benutze NetBeans)

Kann mir vielleicht jemand erklären wie ich schritt für schritt vorgehen muss um eine JDBC- Verbindung herzustellen?

Hab auch schon hier im Forum gesucht und auch einiges zum Thema gefunden, nur versteh ich nen Ablauf des Programms nicht.


----------



## eRaaaa (26. Mrz 2010)

blade hat gesagt.:


> Hier habe ich gelesen das man das Paket aber nicht direkt einbinden soll.
> Denke das damit gemeint ist das ich das Paket nicht unter Propertys --> libraries--> add Library Importieren soll.
> (Benutze NetBeans)



Äh nein! Das mit der Lib musst du schon machen, was gemeint ist, ist dann der Import innerhalb deines Programmes!
Du sollst dann halt das Paket

```
import java.sql.*;
```
verwenden und eben nicht [c]org.postgresql[/c]


----------



## blade (26. Mrz 2010)

Was bedeutet denn der String Url?
Ein Pfad zur DB?
Mein Server hat den Namen Postgres1.
Die DB hat den namen TestDB1.
Wie müsste ich das denn hier eintragen?



```
Verbindung zur Datenbank `JavaUeb' herstellen:

 String url = "jdbc:postgresql://sokrates/JavaUeb";
 Connection con;
 con = DriverManager.getConnection(url, "postgres", "");
```


----------



## blade (26. Mrz 2010)

Hab jetzt diesen CODE geschrieben, bekomm aber den Fehler:

```
SQLException: org.postgresql.util.PSQLException: FEHLER: Relation Â»autoÂ« existiert nicht
BUILD SUCCESSFUL (total time: 1 second)
```
Die Tabelle Auto gibt es aber:rtfm:!


```
public static void main(String[] args) {
        // TODO code application logic here

        //Treiber einbinden
        try {
            Class.forName("org.postgresql.Driver");
        } catch(java.lang.ClassNotFoundException e) {
            System.err.print("ClassNotFoundException: ");
            System.err.println(e.getMessage());
        }

        //Verbinden
    try {
        String url = "jdbc:postgresql://192.168.10.17:5432/Test1";
        Connection con;
        con = DriverManager.getConnection (url, "enterprisedb", "12345");
        
        
         Statement select = con.createStatement();
        ResultSet result = select
          .executeQuery("SELECT * FROM AUTO");
      System.out.println("Got results:");


        con.close();
        } catch(SQLException ex) {
            System.out.println("SQLException: " + ex);
	}

    }
```


----------



## eRaaaa (26. Mrz 2010)

blade hat gesagt.:


> Die DB hat den namen TestDB1.


!=

```
String url = "jdbc:postgresql://192.168.10.17:5432/Test1";
```

Bist du da jetzt evtl. mit den DBs durcheinander gekommen?


----------



## blade (26. Mrz 2010)

nee, ich habe noch schnell eine andere angelegt.


----------



## eRaaaa (26. Mrz 2010)

blade hat gesagt.:


> nee, ich habe noch schnell eine andere angelegt.



Und hoffentlich nicht vergessen dann dort auch die Tabelle Auto anzulegen? :> Zeige mal deine komplette Klasse...


----------



## blade (26. Mrz 2010)

Auto gibt es auch, bin jetzt gerade am überlegen ob ich vielleicht erst noch was in einer .conf freischalten muss damit java drauf darf.
aber andererseits muss java ja schon auf die db gekommen sein, sonst hätte es ja nen fehler gegeben das es die db nicht gibt und nicht nur das die tabelle nicht existiert. 


```
package jdbcpostgres;
import java.sql.*;



public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        // TODO code application logic here
 
        //Treiber einbinden
        try {
            Class.forName("org.postgresql.Driver");
        } catch(java.lang.ClassNotFoundException e) {
            System.err.print("ClassNotFoundException: ");
            System.err.println(e.getMessage());
        }
 
        //Verbinden
    try {
        String url = "jdbc:postgresql://192.168.10.17:5432/Test1";
        Connection con;
        con = DriverManager.getConnection (url, "enterprisedb", "12345");
        
        
         Statement select = con.createStatement();
        ResultSet result = select
          .executeQuery("SELECT * FROM AUTO");
      System.out.println("Got results:");
 
 
        con.close();
        } catch(SQLException ex) {
            System.out.println("SQLException: " + ex);
    }
 
    }
}
```


----------



## eRaaaa (26. Mrz 2010)

blade hat gesagt.:


> aber andererseits muss java ja schon auf die db gekommen sein, sonst hätte es ja nen fehler gegeben



Mhm, sehe ich eig. ähnlich. Bin nun auch überfragt, kannst ja mal Zeile 38 ersetzen mit ex.printStackTrace(); und dann die Ausgabe noch mal zeigen...


----------



## blade (26. Mrz 2010)

Kann den Befehl leider nicht verwenden, bekomme in NetBeans schon den Fehler:"void" type not allowed here 


```
con.close();
        } catch(SQLException ex) {
            System.out.println("SQLException: " + ex.printStackTrace());
	}
```


----------



## eRaaaa (26. Mrz 2010)

:shock: na ohne das [c]System.out.println[/c] natürlich...


----------



## blade (29. Mrz 2010)

es scheint jetzt zu funktionieren.

nur wie gebe ich jetzt meine abfrage zeilenweise aus, bzw. wo steht jetzt mein ergebnis?
lass ich mir mit sout results anzeigen bekomm ich nur: 
	
	
	
	





```
Got results:org.postgresql.jdbc2.Jdbc2ResultSet@bf32c
```
aber kein ergebnis.

aja das problem das ich keine richtige abfrage machen konnte war denke ich das ich es mit ner vm testen wollte. jetzt hab ich aber nochmal ne richtige postgres aufgesetzt und nhier scheint es zu funken.



```
Statement select = con.createStatement();
        ResultSet result = select
          .executeQuery("SELECT * FROM auto");
      System.out.println("Got results:" + result);
```


----------



## eRaaaa (29. Mrz 2010)

Das ResultSet durchlaufen !
Hier eine Beispielabfrage

+

Retrieving Values from Result Sets (The Java™ Tutorials > JDBC(TM) Database Access > JDBC Basics)

p.s.: Woran lags denn jetzt eig.? Also bei der Sache mit der Exception ?


----------



## blade (29. Mrz 2010)

cooles Beispiel, Danke!

```
while ( rs.next() )
        System.out.printf( rs.getString(1));
                           //rs.getString(2), rs.getString(3) );
```

woran es jetzt genau lag kann ich nicht sagen, oder meinst du das hier?


```
con.close();
        } catch(SQLException ex) {
            ex.printStackTrace();
            System.out.println("SQLException: " + ex);
	}

    }
```

Ich kam zwar auf die DB in der VM, aber java hat immer gesagt, das die angegebene db nicht existiert.
jetzt bin ich hin und hab halt nochmal ne extra DB aufgesetzt mit eigener IP usw. und jetzt gehts.

vielen dank für deine hilfe!


----------

