# Einstellungen für die Ausnahme SQLException



## JSteinhilber (6. Feb 2008)

Zunächst Guten Tag liebe Java-Cracks.

Meine Java-Anwendung arbeitet mit einer InnoDB Datenbank unter MySQL.
Der Sperrmodus läuft mittels FOR UPDATE auf Datensatzebene.

Wenn jetzt Person A einen Datensatz sperrt und Person B auf diesen Satz mittels FOR UPDATE zugreifen möchte wird ja die Ausnahme SQLException ausgelöst.
Läßt sich die Wartezeit bis zum Auslösen der Ausnahme (timeout?) einstellen? Am besten sogar auf NULL setzen, damit Person B, bzw. die Programmlogik sofort erfährt daß dieser Satz derzeit in Bearbeitung ist und nicht erst ein oder zwei Sekunden Wartezeit in Kauf nehmen muß?

Sofern ja - wo wird dieses "timeout" eingestellt?
In der my.cnf habe ich es bereits mit innodb_lock_wait_timeout=0 versucht, obwohl dieser Parameter vermutlich nicht für diesen Zweck gedacht ist....und wie erwartet - kein Erfolg.

Wär schön wenn mir jemand weiterhelfen könnte.
Herzliche Grüße
Jürgen


----------



## JSteinhilber (7. Feb 2008)

Kein Forumsmitglied, das sich mit diesem Thema auskennt?

Oder ist meine Frage einfach nur zu blöd?
(Könnte gut möglich sein, schließlich bin ich ein "Java-very-Beginner").

Gruß
Jürgen


----------



## tuxedo (8. Feb 2008)

Hmm, sowas müsste sich doch auf JDBC-Seite einstellen lassen. 
Hast du schon nach "jdbc" und "timeout" gegoogelt?

- Alex


----------



## JSteinhilber (8. Feb 2008)

Hallo Alex,
vielen Dank für Deine Reaktion.
Google ist mein Freund und Freunde besucht man immer zuerst.....
Es gibt eine Einstellung für JDBC -> Statement.setQueryTimeout(int sec), da kann ich aber einstellen was ich will es entsteht immer eine Wartezeit von ca. 2 Sekunden bis die Exception ausgelöst wird.

Diese Wartezeit verlangsamt den weiteren Programmablauf derart, daß die Software in der Praxis fast nicht einsetzbar ist.

Grüße
Jürgen


----------



## maki (8. Feb 2008)

Solltest dir irgendwo anders merken ob der Datensatz bzw. die Entity "gesperrt" ist, falls ja sollte Person B gar nicht mehr die Möglichekit haben auf den Datensatz mittels for update zuzugreifen, zb dadurch das ein Button gesperrt/ausgeblendet wird.


----------



## JSteinhilber (9. Feb 2008)

Hallo maki,
vielen Dank für Deine Anregung.

Ich habe auch schon daran gedacht eine zusätzliche Spalte in die Tabelle zu legen die dann eben mit 0 oder 1 oder was auch immer beschrieben wird, sobald ein Datensatz als gesperrt markiert werden soll.

Und dann nach jeder "Freigabe" das Feld eben wieder erneut beschreiben bzw. dessen Inhalt löschen...
Irgendwie so halt.

Das ist aber alles nicht so das Gelbe.

Die eleganteste aller Lösungen wäre in der Tat, eine sofortige Rückmeldung des DB-Treibers wenn ein angeforderter  Satz derzeit gesperrt ist. 
Alles weitere bzgl. Sicherheitsmechanismen etc. könnte dann die Programmlogik übernehmen.

Obwohl ich wegen dieses Problems Google zum qualmen gebracht habe wurde ich bislang nicht fündig.
Schade eigentlich.

Grüße an Dich
Jürgen


----------



## Guest (10. Feb 2008)

Jage auch mal "Transaction Isolation Level" und "Optimistic Lock" durch die Suchmaschine deiner Wahl.


----------



## JSteinhilber (12. Feb 2008)

Hallo Gast,
vielen Dank für den Tip - das hab ich jetzt gemacht und alles Mögliche und Ummögliche eingestellt.

No success - wie der Schwabe zu sagen pflegt...

Gruß
Jürgen


----------

