Hi.
Ich versuche schon ewig in Java einen Datensatz 'Exklusiv' zu lesen und bei zugriff auf einen bereits exklusiv geöffneten Datensatz eine Meldung zu bringen.. z.B.
DIeser Datensatz ist von User XY Exklusiv geöffnet!.
(Wobei der sperrende User hier sehrt wichtig ist)
Habe schon die verschiedensten Sachen ausprobiert(bis jetzt nur was auf SQL-Ebene gefunden) aber irgendwie komm ich nicht auf eine Lösung.
Damit ihr wisst wie ich es bis jetzt versucht habe poste ich mal einen meiner Versuche.
Einen Datensatz mit SELECT FOR UPDATE öffnen.
Das funktioniert soweit, aber bei einem weiteren zugriff habe ich 2 Probleme.
a: ich komme nicht an den sperrenden User
b: es soll bei zugriff auf einen gesperrten Satz SOFORT die Nachricht kommen 'Datensatz wird gerade von User XY' bearbeitet, zugriff nicht möglich' oder so ähnlich
plz Help.
Hier bisschen quellcode der soweit funktioniert.
Bitte schaut es euch mal an denn ich komm nicht auf die Lösung
Gruss
MScalli
Ich versuche schon ewig in Java einen Datensatz 'Exklusiv' zu lesen und bei zugriff auf einen bereits exklusiv geöffneten Datensatz eine Meldung zu bringen.. z.B.
DIeser Datensatz ist von User XY Exklusiv geöffnet!.
(Wobei der sperrende User hier sehrt wichtig ist)
Habe schon die verschiedensten Sachen ausprobiert(bis jetzt nur was auf SQL-Ebene gefunden) aber irgendwie komm ich nicht auf eine Lösung.
Damit ihr wisst wie ich es bis jetzt versucht habe poste ich mal einen meiner Versuche.
Einen Datensatz mit SELECT FOR UPDATE öffnen.
Das funktioniert soweit, aber bei einem weiteren zugriff habe ich 2 Probleme.
a: ich komme nicht an den sperrenden User
b: es soll bei zugriff auf einen gesperrten Satz SOFORT die Nachricht kommen 'Datensatz wird gerade von User XY' bearbeitet, zugriff nicht möglich' oder so ähnlich
plz Help.
Hier bisschen quellcode der soweit funktioniert.
Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
public class DatenbankTest {
private Connection con = null;
private Statement stmt;
public DatenbankTest(){
System.out.println("START");
// Verbinden mit DB
try {
Class.forName ("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace ();
System.exit (1);
}
// Verbindung mit der Datenbank herstellen
try{
con = DriverManager.getConnection ("jdbc:postgresql:" + "//" +
"SRV" + ":" + // Host
"5432" + "/"+ // Port
"MyDB" , // Database
"postgres", // User
"passwort"); // password
} catch (SQLException e) {
e.printStackTrace ();
System.exit (1);
}
try {
con.setAutoCommit(false);
stmt = con.createStatement();
// Datensatz exklusiv öffnen
stmt.executeQuery("SELECT * FROM hallo WHERE id = '90' FOR UPDATE NOWAIT");
// Wird die JOptionPane angezeigt ist der Datensatz im Exklusiven zugriff.
// ein UPDATE auf genau diesen Datensatz ist nicht mehr möglich
JOptionPane.showInputDialog("UPDATE NOWAIT") ;
con.commit();
}
catch(SQLException ex) {
System.out.println(ex);
}
System.out.println("ENDE");
}
public static void main(String[] args) {
new DatenbankTest();
}
}
Bitte schaut es euch mal an denn ich komm nicht auf die Lösung
Gruss
MScalli