# CreateStatement()



## joergh (8. Aug 2007)

Hallo!

Ich vesuche mich gerade darin mit Hilfe von Frames auf eine (Postgre-)Datenbank zuzugreifen. Klappt insofern auch schon gut, dass ich eine Verbindung hinkriege und mich einloggen kann. Der nächste Schriit ist nun eine Abfrage zu erstellen. Leider klappt es nicht, weder neue Datensätze in eine table einzufügen, noch welche auszulesen. Dies liegt daran, dass der befehl CreateStatement einen Fehler produziert.

Mein Ansatz ist wie folgt:

```
public class LoginDialog extends JFrame {
	
	JTextField nameField;
	JTextField pwField;
	Container c = getContentPane();
	Connection my_con;   
	String userName;
	
	public LoginDialog(){
```
Schöner Dialog mit Button, dem ActionListener zugewiesen ist.
Handler dazu:
...

```
try{
				userName = nameField.getText().toString();
				my_con = DriverManager.getConnection(url, userName, pwField.getText().toString());
				setVisible(false);
				KonfigurationsEditor konEditor = new KonfigurationsEditor();
			}
			catch(Exception ee){
				Label fehler = new Label("Fehler: Konnte nicht verbinden. Versuchen Sie es nochmal!");
				fehler.setBounds(20,10,380,20);
				
				c.add(fehler);
			}
...
```

Hier muss keine Exception abgefangen werden.
Anschließend landet man in einer anderen Klasse die zu einer weiteren Klasse weiterleitet, die folgenden Funktion aufruft, die sich in der selben Klasse befindet, wie der Code oben:


```
public void exe(String s){
		System.out.println(s);
		
		try{    
		    Statement stmt = my_con.createStatement(); // Hier knallts
		    stmt.execute(s);
		    stmt.close();
		}
		catch(SQLException e) {
		    System.out.println("SQL-Fehler bei Abfrage!");
		    System.out.println(e.toString());
		} 
		catch(Exception e){
		    System.out.println(e.getMessage());
		}
	}
```

Das Statement stmt wird leider nicht erstellt und es wird die Exception "null" abgefangen.
Wo liegt mein Fehler? Ich hoffe, dass jemand eine Ferndiagnose machen kann... Danke!

Gruß
joerg


----------



## SlaterB (8. Aug 2007)

System.out.println("my_con ist: "+my_con);
Statement stmt = my_con.createStatement(); 

was kommt denn da wohl raus?


----------



## joergh (9. Aug 2007)

Ja, null...

Aber irgendwie verstehe ich das Problem nicht.
Es ist im Grunde genau gleich wie in den Beispielen, die ich mir noch mal angeguckt habe.
Bisher bin ich auch davon ausgegangen, dass die Verbindung zustande kommt, da bei falschen Benutzernamen oder Passwort eine Exception geschmissen wird. Oder habe ich noch was vergessen... :-\


----------



## SlaterB (9. Aug 2007)

vielleicht wird der Fehler nicht angezeigt (hast du je so ein Label zu Gesicht bekommen?),
ein 
e.printStacktrace();
ist immer die sichere Variante

---------

andererseits könnten das zwei ganz verschiedene my_con sein,
gar in unterschiedlichen Klassen,
ohne deinen Code kann jeder nur wild spekulieren

----------

du hast doch selber
System.out.println(s); 
im ode, ich habe dir schon 

System.out.println("my_con ist: "+my_con); 
Statement stmt = my_con.createStatement(); 

vorgeschlagen,
ist es da wirklich so schwer, auch mal z.B.

my_con = DriverManager.getConnection(url, userName, pwField.getText().toString());
System.out.println("my_con ist erfolgreich initialisiert: "+my_con); 

zu schreiben?
stumme Programme geben Rätsel auf, aber ist doch sooo einfach, alles selber rauszufinden
(wenn my_con doch erfolgreich initialisiert wird muss man noch andere Probleme finden,
aber könnte eine Möglichkeit abhaken)


----------



## Daywalker2004 (10. Aug 2007)

Ich hab noch nie zu einer Postgre-Datenbank verbunden, aber musst du nicht erst den Datenbanktreiber laden über: 


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

Nun kannst du eine neue Verbindung aufbauen, die die Form


```
Connection con = DriverManager.getConnection("jdbc:postgresql://HOST:PORT/Datenbank","Benutzer","Passwort");
```

haben muss.

So kenn ich das von anderen Datenbankverbindung. Vielleicht hilft es dir ja. Kann aber auch sein, dass ich mich jetzt komplett irre.

Auslesen von Daten (wie gesagt ich übetrage das jetzt von einer Oracle-Datenbank):


```
try {
// Neues Statement anlegen
Statement stmt = con.createStatement

// ResultSet mit Daten füllen
ResultSet rst = stmt.executeQuery(sql);

while(rst.next) {

System.out.println(rst.getObject[1]);

}

rst.close;
stmt.close;
} catch (SQLException ex) {
ex.printStack();
}
```


----------

