Lostupdate & Sperren in JDBC

Status
Nicht offen für weitere Antworten.

Gayson

Bekanntes Mitglied
Hallo!
Ich soll als Aufgabe von der Uni in einem kleinen Programm das Lostupdate-Problem aufzeigen, dass in Abhängigkeit eines übergebenen Parameters auftreten soll oder nicht. Lostupdate funktioniert wie ich es unten aufgeschrieben habe, das Problem ist noch commit. Er kann im TRANSACTION_SERIALIZABLE-Level keines der executeUpdate, commit oder rollback durchführen, was wohl daran liegen dürfte, dass das DBMS (DB2) im Hintergrund irgendwelche Sperren setzt. Ich weiß irgendwie nicht, wie ich an dieses Problem rangehen soll, damit das Programm zum Ende läuft, habt ihr Ideen?
Danke!!

Code:
// 1. zwei Connections auf dieselbe Datenbank öffnen
Connection con1 = DriverManager.getConnection(...);
con1.setAutoCommit(false);
Connection con2 = DriverManager.getConnection(...);
con2.setAutoCommit(false);
// 2. Transactionlevel setzen, in Abhängigkeit vom übergegenen Parameter
if (modus.equals("lostupdate")){
   con1.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
   con2.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
} else{
   con1.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
   con2.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
}
// 3. jeweils in einem eigenen Thread werden 2 Updates durchgeführt (habs ein wenig vereinfacht)
con1.executeUpdate("UPDATE konten SET kontostand = 5 WHERE kontonr = 1");
con2.executeUpdate("UPDATE konten SET kontostand = 7 WHERE kontonr = 1");
// 4. Warten, bis die Updates ausgeführt dinf
Thread.sleep(1500);
// 5. Commit
con1.commit();
con2.commit();
 
S

SlaterB

Gast
was willst du damit sagen?, dass TRANSACTION_SERIALIZABLE generell nicht geht?

warum dann überhaupt die Uniaufgabe erwähnen, warum so ein komplizierter Code?
Code:
Connection con1 = DriverManager.getConnection(...);
con1.setAutoCommit(false);
con1.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
// Update
con1.executeUpdate("UPDATE konten SET kontostand = 5 WHERE kontonr = 1");
// 4. Warten, bis das Update ausgeführt sind
Thread.sleep(1500);
// 5. Commit
con1.commit();
müsste dann doch genau den gleichen Fehler produzieren
oder klappt das etwa?

ich kann ansonsten nicht weiterhelfen ;)
 

Gayson

Bekanntes Mitglied
Also der Code, den du oben beschrieben hast, funktioniert in TRANSACTION_SERIALIZABLE (grad nochmal ausprobiert, läuft bis zum Ende das Programm). Das Problem muss in 2 Connections, die auf dasselbe Tupel updaten, liegen, sodass das DBMS eine Sperre setzt, und da dann ein Deadlock eintritt... Und da habe ich keine Idee, wie ich das schaffe, das Programm dazu zu bekommen, bis zum Ende zu laufen...
 

Gayson

Bekanntes Mitglied
Was ich halt überhaupt nicht verstehe, ist, warum noch nicht mal das 1. Update klappt . Vom Prinzip her müsste doch 1. Update ausgeführt werden, und dass 2. abgebrochen oder verzögert werden?!
 
S

SlaterB

Gast
bist du denn sicher dass das erste nicht klappt?

wenn das erste allein klappt wann klappt es nicht mehr?
wenn du Connection2 erzeugst?
wenn du Connection2 auf TRANSACTION_SERIALIZABLE setzt?
usw, teste Zeile um Zeile was los, was wann warum und wieso passiert,

wenn du hier zum zweiten Mal nur schreibst 'ich weiß nicht was los ist',
dann habe ich auch keine Lust mehr das alles Punkt um Punkt abzufragen..

meine Vermutung:
con1.executeUpdate("UPDATE konten SET kontostand = 5 WHERE kontonr = 1");
funktioniert tadellos
(testen, ob danach ein System.out.println ausgeführt wird)

der Befehl danach blockiert aber, er wartet bis die erste Verbindung committed,

ewiges Warten kann man evtl. noch durch setzen eines Timeouts verhindern,
dazu kann ich persönlich nix genaues sagen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M HSQLDB .Script-Datei entfernen oder sperren Datenbankprogrammierung 18
T Einzelne Datenbankzeile schreibend sperren? Datenbankprogrammierung 11
G Tabelle für Zeitraum sperren Datenbankprogrammierung 4
M Zugriff für andere sperren Datenbankprogrammierung 11
G update sperren bei client/server anwendung Datenbankprogrammierung 7
N SELECT: Datensatz sperren Datenbankprogrammierung 6
B SQLite + jdbc + IntelliJ-Consumer = "No suitable driver found..." Datenbankprogrammierung 15
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
N JDBC SQLITE und Cascading Datenbankprogrammierung 2
D Asynchrone Aufrufe mit jdbc Datenbankprogrammierung 5
Edin JDBC Hilfe Datenbankprogrammierung 2
H JDBC Tabellen ausgeben Datenbankprogrammierung 8
Husamoli345 JSF-JDBC Verbindung Crud Datenbankprogrammierung 15
G MySQL JDBC Metadaten auslesen aus .accdb -> Primärschlüssel manchmal erkannt manchmal nicht Datenbankprogrammierung 3
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
O Create Table per JDBC Fehler: ORA-00922 Datenbankprogrammierung 4
J JDBC anschaulich präsentieren Datenbankprogrammierung 2
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
ralfb1105 Oracle JDBC Debugging Datenbankprogrammierung 8
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
Thallius MySQL jdbc schließt Verbindung nach vielen Request von selber Datenbankprogrammierung 8
B MySQL JDBC Kommentarfilter Datenbankprogrammierung 4
Aruetiise MySQL Name JDBC Drive finden Datenbankprogrammierung 4
E Sqlite-jdbc Mitliefern Datenbankprogrammierung 4
R jdbc-Zugriff Nicht erlaubt ? Datenbankprogrammierung 16
S probleme mit dem jdbc treiber Datenbankprogrammierung 1
Thallius MySQL Merkwürdiges JDBC Verhalten bei VPN Verbindung. Datenbankprogrammierung 7
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
F MySQL JDBC Problem Datenbankprogrammierung 5
C JDBC und SQLite Datenbank Datenbankprogrammierung 8
looparda SQLite Active JDBC Abstraktion Datenbankprogrammierung 2
J JDBC SQL Statement mit Parameter Datenbankprogrammierung 7
S JDBC PreparedStatement durchiterieren Datenbankprogrammierung 6
J RESTServie + JDBC + No suitable driver found for jdbc Datenbankprogrammierung 4
KaffeeFan JDBC/ODBC-Bridge entfernt Datenbankprogrammierung 4
S sun.jdbc.odbc.JdbcOdbcDriver wird nicht gefunden Datenbankprogrammierung 2
J Fehlende DatenbankView nach einbeziehen von JDBC Datenbankprogrammierung 3
A Mit JDBC auf postgreSQL Datenbank zugreifen Datenbankprogrammierung 5
C PostgreSQL JDBC + PostgreSQL: getLong liefert 0 statt NULL Datenbankprogrammierung 2
flenst111 SQL-Statement Wie konfiguriert man JDBC-Connect.richtig, damit es bei riesigen Tabs keinen Speicherüberlauf gibt? Datenbankprogrammierung 1
M JDBC Tabellen mit Boolean Spalten können nicht erstellt werden. DB Updaten - wie? Datenbankprogrammierung 6
S JDBC mit Postgres DB connecten Datenbankprogrammierung 3
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
D JDBC - Verständnisfrage Datenbankprogrammierung 2
C Tabelle erstellen mit Apache JDBC-Util Datenbankprogrammierung 1
L Conversion-Error bei JDBC Date Literals Datenbankprogrammierung 3
X MySQL DB-verbindung ohne JDBC/ODBC Datenbankprogrammierung 1
F sun.jdbc.odbc.jdbcodbcdriver wird nicht gefuden Datenbankprogrammierung 3
J Keine Verbindung zu MSSQL DB mit JDBC Datenbankprogrammierung 3
U JDBC prepaird Statements Datenbankprogrammierung 4
B MySQL JDBC Zugriff auf entfernt Datenbank, fehlende Rechte Datenbankprogrammierung 2
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
R Transaktionen von mehreren Anwendungen aus - JDBC Datenbankprogrammierung 3
N MySQL com.microsoft.sqlserver.jdbc.SQLServerException: Die Verbindung wurde geschlossen. Datenbankprogrammierung 1
N JDBC: rollback() bei Exception geht nicht!? Datenbankprogrammierung 1
C Dateipfad des jdbc Treibers Datenbankprogrammierung 2
G JDBC Connect nur über SID fehlerfrei möglich Datenbankprogrammierung 2
R Oracle jdbc Zugriff auf Oracle Datenbankprogrammierung 2
T JDBC Fehler Datenbankprogrammierung 2
J JDBC via Singleton Datenbankprogrammierung 12
Z PostgreSQL JDBC mit Postgresql Datenbankprogrammierung 2
B No suitable driver found for jdbc:oracle:thin:@$HOST:$PORT:$SID Datenbankprogrammierung 7
K JDBC via Netzwerk Datenbankprogrammierung 4
B JDBC Connection Fehler Datenbankprogrammierung 8
K JDBC- In Java "stored procedure" erstellen für DB2,OracleSql ... Datenbankprogrammierung 3
J JDBC in Library|"Treiber konnte nicht geladen werden"" Datenbankprogrammierung 2
B JDBC-Connection: Data source name too long Datenbankprogrammierung 3
D JDBC insert mit select abfrage Datenbankprogrammierung 5
A JDBC Prepared Statement Autoincrement Datenbankprogrammierung 3
H JDBC prüfen ob Table existiert Datenbankprogrammierung 3
crashfinger jdbc-connection mit jre7 funktioniert nicht Datenbankprogrammierung 5
0 JDBC Oracle Verbindungsaufbau Datenbankprogrammierung 6
Q Oracle Linux: ClassNotFoundException: oracle.jdbc.driver.OracleDriver Datenbankprogrammierung 6
B JDBC MySQL Statement Datenbankprogrammierung 3
F Oracle Oracle JDBC Anbindung unter Glassfish 3.1.2 Datenbankprogrammierung 3
V PostgreSQL JDBC Treiber fehlt Datenbankprogrammierung 6
Y JDBC - Datenbankabfrage Webserver Datenbankprogrammierung 4
C JDBC Datenbank funktioniert nicht Datenbankprogrammierung 7
C JDBC , JDO oder JPA Datenbankprogrammierung 17
J MySQL Datenbank konfigurieren, JDBC, MySQL oder Hibernate Datenbankprogrammierung 2
P JDBC Verbindung zur DB klappt nicht Datenbankprogrammierung 6
J Java - JDBC Verbindung zur Datenbank nicht möglich Datenbankprogrammierung 10
K JDBC Buch kaufen? Datenbankprogrammierung 3
K Hibernate vs. JDBC Datenbankprogrammierung 4
K JDBC Driver not found Datenbankprogrammierung 10
GianaSisters Per JDBC auf Microsoft SQL 2005 Datenbankprogrammierung 24
S ich brauche tipps für JDBC Datenbankprogrammierung 4
Paristick MSSQL - JDBC Exception beim Registrieren Datenbankprogrammierung 5
S Applet stucks at SQL Connection (jTDS JDBC) Datenbankprogrammierung 15
R MySQL Voraussetzungen für eine erfolgreiche Datenbankanbindung mittels JDBC Datenbankprogrammierung 2
c_sidi90 JDBC Oracle Connection schlägt fehl Datenbankprogrammierung 2
J jdbc-dataSource in Klassen nutzen Datenbankprogrammierung 2
H Rechnen in Datenbanken - JDBC Mittel der Wahl? Datenbankprogrammierung 32
K MySQL JDBC - Access Datenbank - unbekannter TabellenName Datenbankprogrammierung 4
D JDBC Fehler beim laden der nativen Bibliothek db2jcct2 Datenbankprogrammierung 9
J MySQL Verbindung über JDBC scheitert immer Datenbankprogrammierung 2
I Master/Detail Tabellen mit JDBC und Swing Datenbankprogrammierung 10
S MSSQL JDBC "Driver class not found" Datenbankprogrammierung 9
E Datenbankverbindung mit Oracle JDBC und Eclipse Plugin Quantum db Datenbankprogrammierung 2
ruutaiokwu jdbc connection als singleton Datenbankprogrammierung 11

Ähnliche Java Themen


Oben