Gleichzeitiger Zugriff auf Datensatz

C

Camino

Gast
Hallo,

ich entwickle zur Zeit eine Swing-Anwendung (Verwaltungstool), welche auf eine PostgreSQL-Datenbank zugreift, d.h. genauer, es soll mehrere Clients geben, die über JDBC auf eine PostgreSQL-DB auf einem externen Server (über TCP/IP) zugreifen. Praktisch ist es ziemlich unwahrscheinlich (ca. 5 Anwender gleichzeitig, die räumlich zusammenhängen), aber theoretisch möglich, dass gleichzeitig zwei oder mehrere Anwender auf den selben Datensatz in der Datenbank zugreifen und ändern könnten. Gibt es eine Möglichkeit, wie es dies ausschliessen und verhindern kann?

Ich dachte evtl. an ein Feld in der Datenbank-Tabelle, welches speichert, ob und welcher Anwender gerade an dem Datensatz arbeitet und dies dann für andere Anwender sperrt. Oder gibt es eine andere und bessere Möglichkeit?

Gruss
Camino
 
C

Camino

Gast
Hallo,

und danke. Das kannte ich noch nicht...

Brauche ich dafür Hibernate o.ä., oder kann ich das in meine Swing/JDBC-Anwendung einbauen? Wenn ich das richtig verstanden habe, hole ich mir bei Optimistic Locking vorher den Datensatz, und überprüfe beim Speichern, ob dieser geholte Datensatz immer noch aktuell in der DB ist, erst dann wird er in die DB geschrieben und aktualisiert. Das Problem dabei scheint zu sein, dass wenn dann ein Problem auftritt (Datensatz wurde zwischenzeitlich geändert), dass es dann evtl. komplizierter werden kann, weil überlegt werden mus, was zu tun ist.

Pessimistic Locking schliesst von vorne gleich aus, dass ein anderer den Datensatz holen, bearbeiten und wieder in der DB speichern kann. Scheint mir eigentlich vorteilhafter. Hab aber noch nicht gefunden, wie das umgesetzt wird. Werde mal weiter suchen...

Gruss
Camino
 
M

Marcinek

Gast
nein du brauchst natürlich nicht hibernate dafür.

Optimistic Locking: Es wird eine Version pro Datensatz gespeichert. Jedes Schreiben inkrementiert die Version.

Ablauf

User 1 holt datensatz mit version 1
User 2 holt datensatz mit version 1
User 1 speicher datensatz version 1= > version 2
User 2 möchte speuchern ==> Seine Version ist 1 aktuelle ist 2 ==> Fehler: Der Datensatz wurde zwischenzeitlich geändert:

- Hier kann man dennoch überschreiben
- Zum reloaden (Änderungen verwerfen und nochmal machen) zwingen

Pesimistic Locking ist aufwendiger meiner Meinung nach.

Du speichertst in der DB an. welcher Datensatz sich in welchem Zustand befindet.

User 1 öffnet Datensatz zum bearbeiten ==> Lock wird in DB geschrieben.
User 2 öffnet Datensatz zum bearbeiten ==> Fehler: Anderer User schreibt Datensatz wird zum anzeigen geladen.

Ähnlich wie bei Word, wenn man 2x auf die gleiche Datei zugreift

Gruß,
Martin
 
C

Camino

Gast
Hallo,

für "FOR UPDATE/FOR SHARE Clause" braucht man Transaktionen. Hab mich damit leider noch nicht beschäftigt, werde ich mir aber mal anschauen.

Meine Ausgangslage ist so, dass ich mir die (gefilterten) Datensätze aus der PostgreSQL-DB in eine ArrayList<Person-Objekt> hole, und dann innerhalb dieser Liste blättern kann, wobei immer der aktuelle Datensatz dann in einem Formular angezeigt, verändert und wieder gespeichert werden kann. Das bedeutet, die anderen Clients bekommen garnicht mit, wenn ein Client einen Datensatz bearbeitet. Da würde dann ja das Optimistic Locking funktionieren, d.h. ich überprüfe beim Speichern der Änderung, ob der vorher geholte Datensatz mit der aktuellen Versionin der DB noch übereinstimmt (Vergleich von Personen-Objekten). Erst dann kann das Update erfolgen. Wenn nicht, kommt eine Mitteilung, dass sich der Datensatz in der Zwischenzeit geändert hat und neugeladen und aktualisert angezeigt wird. Dabei gehen dann aber die zuvor gemachten Änderungen im Formular verloren und müssen neu eingegeben werden.

Innerhalb dieses Formulars (Personen-Eingabemaske) gibt es noch eine Antragsübersicht in einer JTable. Durch Doppelklick einen Eintrag wird ein bestimmter Antrag ausgewählt und dann in einem anderen Formular (Antrag-Eingabemaske) angezeigt. Dort kann dann geändert und gespeichert werden. Dafür wäre ja nun das Pessimistic Locking geeignet, da ich ja durch Doppelklicken in der Tabelle Antragsübersicht deutlich mache, dass ich einen Antrag zum evtl. Ändern angezeigt bekommen möchte, und in dieser Zeit niemand anderes an diesen Antragsdaten arbeiten kann/darf. Dazu müsste ich dann in der DB-Tabelle 'Anträge' ein Feld haben, welches speichert, wer gerade an diesem Datensatz arbeitet, und dies beim Verlassen des Datensatzes wieder entfernen. Wäre das so richtig? Was passiert, wenn aus irgendwelchen Gründen das Locking nicht entfernt wird? Zum Beispiel Stromausfall, Computerabsturz....?

Gruss
Camino
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Gleichzeitiger Zugriff auf der DB Datenbankprogrammierung 11
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
H MariaDB-Zugriff mittels Java SE Datenbankprogrammierung 3
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
M Datenbank vor unerlaubtem Zugriff durch Benutzer schützen Datenbankprogrammierung 3
L Zugriff auf ein Resultset Datenbankprogrammierung 7
R jdbc-Zugriff Nicht erlaubt ? Datenbankprogrammierung 16
K Eclipse: JBoss Hibernate Tool: Kein Zugriff auf Datenbank Datenbankprogrammierung 5
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
D JavaFX Anwendung zugriff auf MySQL DB. Datenbankprogrammierung 2
F Zugriff auf ein bestimmte Row Datenbankprogrammierung 13
S HSQLDB Zugriff auf Access Datenbank Datenbankprogrammierung 0
K MySQL Datenbank 2facher Zugriff Datenbankprogrammierung 1
M DB-Zugriff funktioniert nach JAR-Erstellung nicht mehr Datenbankprogrammierung 3
P Datenbank Zugriff fehlgeschlagen Datenbankprogrammierung 9
B MySQL JDBC Zugriff auf entfernt Datenbank, fehlende Rechte Datenbankprogrammierung 2
L Zugriff auf lokal gespeicherte mySQL Datenbank Datenbankprogrammierung 3
L MySQL App/Java Zugriff auf Mysql-DB funktioniert nicht Datenbankprogrammierung 1
W MySQL -Server Einstellung -- Zugriff übers lokale Netzwerk Datenbankprogrammierung 1
R Oracle jdbc Zugriff auf Oracle Datenbankprogrammierung 2
T Derby/JavaDB Zugriff auf DB mit exportiertem Programm Datenbankprogrammierung 12
A MySQL-Zugriff auf Raspberry Pi Datenbankprogrammierung 2
T PostgreSQL Best Practice: Konkurrierender DB-Zugriff mit meherern Programmen? Datenbankprogrammierung 20
D .mdb Datenbank Zugriff fehlgeschlagen Datenbankprogrammierung 5
B Datenbanken schützen vor Zugriff Datenbankprogrammierung 3
E Zugriff auf MySQL-Datenbank Datenbankprogrammierung 4
K MySQL Zugriff auf Remote-DB verweigert Datenbankprogrammierung 6
G MySQL Zugriff auf Datenbank Objekt Datenbankprogrammierung 19
C Hibernate n:m mittels Zwischentabelle und bidirektionaler Zugriff Datenbankprogrammierung 2
M Zugriff auf mdb via ODBC steuern Datenbankprogrammierung 2
A Zugriff auf DB-Tabellen mit Objekten Datenbankprogrammierung 3
D Was passiert bei absolut zeitgleichem Zugriff auf eine Tablerow Datenbankprogrammierung 7
I Zugriff auf Datenbank nach Erstellen einer Executable Jar Datei verweigert Datenbankprogrammierung 10
I Zugriff auf eine Datenbank auf dem Webserver Datenbankprogrammierung 2
J Derby/JavaDB Zugriff ohne Entwicklungsumgebung Datenbankprogrammierung 5
E H2 - Globalen Zugriff auf die Datenbank? Datenbankprogrammierung 10
J Zugriff auf MySQL-Datenbank Datenbankprogrammierung 5
F Zugriff auf MS Access-Datenbank mit jackcess Datenbankprogrammierung 10
F suche Erstanschub für DB-Zugriff Datenbankprogrammierung 9
E einfache Frage bei DB-Zugriff Datenbankprogrammierung 11
P MySQL Remote Zugriff Datenbankprogrammierung 2
T Problem bei Zugriff auf Access Datenbank Datenbankprogrammierung 7
T MySQL Zugriff ohne Angabe der Datenbank Datenbankprogrammierung 3
M Zugriff auf eine Access-Datenbank innerhalb eines jar-Files Datenbankprogrammierung 7
N Wie kann ich Zugriff auf eine MS Access DB (mit JDBC) über Netzwerk erreichen? Datenbankprogrammierung 7
J Frage zu Synchronisation bei parallelem Zugriff, speziell mit JPA Datenbankprogrammierung 2
T DB Zugriff mit Java Web Datenbankprogrammierung 6
R Zugriff auf SQL im PreparedStatement Datenbankprogrammierung 4
F Zugriff auf MS Access DB Datenbankprogrammierung 3
J Nullpointer Exception bei Zugriff auf Datenbank Datenbankprogrammierung 13
J Zugriff auf Access-Datenbank Datenbankprogrammierung 3
A Zugriff auf Remote MySQL-DB mit JAR-File Datenbankprogrammierung 7
R Java DB Zugriff Datenbankprogrammierung 2
T Zugriff auf Derby-Datenbank will einfach nicht klappen Datenbankprogrammierung 22
G Zugriff auf Datenbank im Internet Datenbankprogrammierung 6
J Java DB Zugriff auf Access (Migration auf andere DB) Datenbankprogrammierung 8
G treiber für datenbank zugriff Datenbankprogrammierung 3
L Datenbank URL Zugriff Datenbankprogrammierung 9
G Wie baut man eine Anwendung mit DB Zugriff Datenbankprogrammierung 3
QDog JPA persistence.xml auslagern/extern Zugriff Datenbankprogrammierung 2
A HSQLDB Performance bei erstem Zugriff Datenbankprogrammierung 6
S Datenbank zugriff optimieren - zugriff ohne cursor? Datenbankprogrammierung 7
A Zugriff auf DB-Pool, der von Servlet initialisiert wurde Datenbankprogrammierung 4
J MYSQL-Zugriff mittels einer Java-Bean Datenbankprogrammierung 42
M mySQL zugriff funktionert nach ca4 stündiger laufzeit nicht Datenbankprogrammierung 6
J Zugriff mit DataSource Datenbankprogrammierung 7
M Zugriff für andere sperren Datenbankprogrammierung 11
K Zugriff mittels JDBC funktioniert nur lokal Datenbankprogrammierung 5
S Zugriff auf eine große Datenmenge von MS Access per JDBC Datenbankprogrammierung 11
G Hibernate Zugriff Datenbankprogrammierung 5
E JDBC Oracle Fehler, zugriff auf datenbank (Cluster) Datenbankprogrammierung 5
D ODBC Zugriff auf MDB-Datenbank, Insert Into ohne Funktion Datenbankprogrammierung 2
T Zugriff auf MS-Access-DB ist grottenlangsam. Normal? Datenbankprogrammierung 9
G Verwendung neuen Treiber für JDBC-Zugriff auf OracleDB Datenbankprogrammierung 5
G Access Zugriff, DB auf Server, Applet Datenbankprogrammierung 4
D Problem beim Zugriff auf eine Oracle-DB Datenbankprogrammierung 23
D Kann nicht auf MySQL Datenbank Zugriff Datenbankprogrammierung 9
G Policy Eintrag für SQL Zugriff im Netzwerk Datenbankprogrammierung 10
S Java SQL-Exception bei Zugriff auf MSAccess Datenbankprogrammierung 2
S JDBC Zugriff auf SQLServer Datenbankprogrammierung 9
D Datenbank zugriff über Client/Server Datenbankprogrammierung 4
M Zugriff auf PostgreSQL mit JAva! Datenbankprogrammierung 7
F Zugriff auf ODBC-Datenbank übers Netzwerk Datenbankprogrammierung 6
G Problem beim Zugriff SQL 2000 Datenbankprogrammierung 2
T Verwaltungsystem mit grafischer Oberfläche mit Zugriff auf. Datenbankprogrammierung 6
C Zugriff auf MS Access Datenbankprogrammierung 4
D Zugriff auf Paradox-Datenbank Datenbankprogrammierung 10
B ResultSet aus Session geladen, aber kein Zugriff möglich Datenbankprogrammierung 6
D HSQLDB Datenbank Zugriff! Datenbankprogrammierung 4
L Programm-Architektur bei DB-Zugriff Datenbankprogrammierung 6
R Zugriff auf MySQL-Datenbank im Internet Datenbankprogrammierung 13
L Zugriff von Applet auf mysql-DB Datenbankprogrammierung 2
K Zugriff auf Access-Datenbank Datenbankprogrammierung 4
R Datenbank zugriff funktioniert nur offline Datenbankprogrammierung 2
G Fehlermeldung beim Zugriff auf SQL-Server-DB Datenbankprogrammierung 3
D Mysql zugriff aus java nicht moeglich Datenbankprogrammierung 2
F SQLite Datensatz löschen Datenbankprogrammierung 13
B Mit Button einen Datensatz löschen Datenbankprogrammierung 2
S sql query, um bestimten datensatz zu finden Datenbankprogrammierung 33
D MySQL Neuen Datensatz mit "new" anlegen Datenbankprogrammierung 16

Ähnliche Java Themen

Neue Themen


Oben