# Programm wird nach DB-Eintrag nicht weitergeführt



## Cromm Cruach (4. Sep 2012)

Hallo,

mit folgendem Code möchte ich eine Zeile in die DB schreiben:


```
String[] varMovie ={ window.importPanel.importField.getText(),
							 title,
							 discription,
							 rating,
							 certification,
							 release,
							 runtime,
							 budget,
							 revenue,
							 new QualityTable().getId(window.tabPane.fileInfoPanel.qualityCombo.getSelectedItem().toString())+"",
							 size,
							 new LocationTable().getId(window.tabPane.fileInfoPanel.locationCombo.getSelectedItem().toString())+""};
		System.out.println("Füge Daten hinzu");
		movieTable.addRow(varMovie);
		System.out.println("Daten hinzugefüht")
```

Folgender Code steht in der 
	
	
	
	





```
addRow()
```


```
public void addRow(String[] var){
		DBHandler db = new DBHandler();
		db.QueryUpdate("INSERT INTO movies (movieID, title, discription, rating, certification, released, runtime, budget, revenue, qualityID, size, locationID, lastupdate)"+
					    "VALUES(?,?,?,?,?,?,?,?,?,?,?,?, CURRENT_TIMESTAMP())", var);		
		db.close();
	}
```

Hier noch der Code der Methode 
	
	
	
	





```
QueryUpdate()
```


```
public void QueryUpdate(String sqlCommand, String[] var){ 
        try {
        	if(var == null){
        		stmt.executeUpdate(sqlCommand);
        	}else{
        		PreparedStatement prepStmt = conn.prepareStatement(sqlCommand);
        		for(int i = 0; i < var.length; i++){
        			prepStmt.setString(i+1, var[i]);
        		}
        		prepStmt.executeUpdate();
        	}

        } catch (Exception e) {
			System.err.println(""+e);
		}
       
    }
```

Das Programm führt den Query aus und dieser ist nachher wie gewünscht im Programm zu finden. Auch das Stringarray ist korrekt befüllt!
Nur wird das Programm nach der DB-Operation nicht fortgeführt. Es stürzt nicht ab und es wird auch kein Fehler ausgegeben. Es wird einach nicht fortgesetzt. In der Console wird nur 
	
	
	
	





```
Füge Daten hinzu
```
 ausgegeben. Dann passiert nichts mehr . Verstehe nicht warum das Programm nicht weiter ausgeführt wird...

Gruß


----------



## turtle (4. Sep 2012)

```
db.QueryUpdate("INSERT INTO movies (movieID, title, discription, rating, certification, released, runtime, budget, revenue, qualityID, size, locationID, lastupdate)"+
                        "VALUES(?,?,?,?,?,?,?,?,?,?,?,?, CURRENT_TIMESTAMP())", var);
```

Bei Prepared Statements musst Du alle Parameter setzen, bevor Du das Kommando gegen die DB feuerst. Folgende Infos schaden nicht zu lesen. Bei deinem Beispiel also so etwas

```
updateKommando.setString(2, varMovie[1]);
```


----------



## maki (4. Sep 2012)

> Es stürzt nicht ab und es wird auch kein Fehler ausgegeben. Es wird einach nicht fortgesetzt. In der Console wird nur Füge Daten hinzu ausgegeben. Dann passiert nichts mehr .


Wie lange hast du denn schon gewartet?

Kann sein dass ein Timeout (zB. wegen unbekanntem Host/Ip Addresse in der DB URL) abgewartet wird.


----------



## Cromm Cruach (4. Sep 2012)

Die DB ist embedet! Und wie gesagt der String ist da in der DB! Es geht nur nicht weiter!

@ Trutle: das mach ich doch in 
	
	
	
	





```
Zeile 8 der QueryUpdate();
```
 oder meinst du was anderes?

Ich lasse die Einträge nun von einem Objekt regeln voher war der komplette Code in in einer Classe. Da hats funktioniert!

EDIT:

Ok Er bleibt beim DB-Close hängen


```
public void close(){
		try {
			conn.close();
			rs.close();
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
```

er bleibt beim 
	
	
	
	





```
rs.close();
```
 hängen.


----------



## nillehammer (4. Sep 2012)

Die Reihenfolge der close-Aufrufe ist falsch. Beim öffnen immer Connection, Statement, ResultSet. Beim Schließen genau umgekehrt.

Es ist imho nicht nötig, dediziert close auf dem ResultSet aufzurufen. Wenn Du im selben Block das Statement closest, wird ResultSet gleich mit geschlossen.


----------



## SlaterB (4. Sep 2012)

Eselsbrücke:
erst aus Auto aussteigen, dann durch Haupteingang rein, dann durch Tresortür,
mit Geld genau andersrum, erst aus Tresor raus, dann durch Haupteingang und wieder ins Fluchauto rein


----------

