Programm wird nach DB-Eintrag nicht weitergeführt

Cromm Cruach

Mitglied
Hallo,

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

Java:
		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
Code:
addRow()

Java:
	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
Code:
QueryUpdate()

Java:
	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
Code:
Füge Daten hinzu
ausgegeben. Dann passiert nichts mehr . Verstehe nicht warum das Programm nicht weiter ausgeführt wird...

Gruß
 
Java:
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
Java:
updateKommando.setString(2, varMovie[1]);
 
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.
 
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
Code:
 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

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

er bleibt beim
Code:
rs.close();
hängen.
 
Zuletzt bearbeitet:
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.
 
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
 

Neue Themen


Zurück
Oben