Anmelden

View Full Version : jt400 SQL-Update



Dw4rf79
08-04-09, 08:16
Hallo,
ich habe ein Javaprogramm, welches auf mehrere Tabellen SQL-Updates ausführt. Bei den meisten Tabellen funktioniert folgendes Codebeispiel auch. Bei einigen Dateien jedoch bleibt das Programm ohne Fehlermeldung hängen. Auf der i5 ist dann eine Dateisperre auf der Datei. Das Problem tritt nur bei Dateien in bestimmten Bibliotheken auf. Hat vielleicht jemand eine Idee voran das liegen könnte?


try {
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
con = DriverManager.getConnection(sURL, sUser, sPass);
stmt = con.prepareStatement(sSQL);
iUpdateCount = stmt.executeUpdate();
if (iUpdateCount < 1) {
uebersetzerErrorBox.setErrorMessage("Fehler: Keine Datensätze aktualisiert.\nSQL-Update: " + sSQL);
uebersetzerErrorBox.setVisible(true);
}
stmt.close();
con.close();
} catch (ClassNotFoundException e) {
uebersetzerErrorBox.setErrorMessage("Message: " + e.getMessage() + "\nExecption: " + e.getException() + "\nCause: " + e.getCause());
uebersetzerErrorBox.setVisible(true);
} catch (SQLException e) {
uebersetzerErrorBox.setErrorMessage("Message: " + e.getMessage() + "\nErrorCode: " + e.getErrorCode() + "\nCause: " + e.getCause());
uebersetzerErrorBox.setVisible(true);
}

Fuerchau
08-04-09, 09:14
Das liegt ggf. am Connection-Pooling.
Solange dein Java-Programm noch aktiv ist, wird ein Close der Verbindung nicht durchgeführt sondern diese in den Pool gestellt.
Da die AS/400 Dateien ggf. offen hält (ODP's), bleibt die Datei eben im Zugriff (Shared-Sperre).
Wenn du die Sperre explizit freigeben willst, musst du die Verbindung so schließen, dass diese nicht in den Pool zurückgeht. Ggf. ist das Pooling (mit leichten Performance-Nachteilen) auszuschließen.

ExAzubi
10-04-09, 16:55
Könnte es sein, das du versucht auf einer VIEW ein update zu machen?
Auf einer VIEW geht kein update.

Ich würde dir auch raten, die close statements in den catch-Block mit einzubauen.