Warten bis SQL befehl ausgeführt wurde!

Status
Nicht offen für weitere Antworten.
J

Java Nooob

Gast
Hi folgendes Problem.

Ich habe mehrere Datenbanlabfragen hintereinander. Die Abfragen beziehen sich alle auf die selbe Tabelle.
Wie kann ich sicherstellen das die Abfagen Zeitlich so ablaufen das der nächste SQL Befehl erst ausgeführt wird wenn der vorherige beendet ist. Hier mal ein bisschen code.

Code:
    public static void conUpdate(String sqlQuery){
        //Überprüfen ob ODBC Treiber vorhanden sind!!
        try {
            Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
        }
        catch ( ClassNotFoundException e ) {
            System.out.println( "Fehler bei ODBC-JDBC-Bridge" + e );
            return;
        }

        //Verbindung herstellen mit sqlQuery!
        try {   
            String url = "jdbc:odbc:kn";
            con = DriverManager.getConnection( url, "lutz", "lutz" );
            stmt = con.createStatement(1004, 1008);
            
            //String sqlQuery = "SELECT Name, Abteilung FROM Name WHERE Abteilung =  'STR CI';";
            System.out.println(sqlQuery);
            stmt.executeUpdate( sqlQuery );    
        }
        catch ( SQLException e )
        {
            e.printStackTrace();
            JDialog fehlermeldung = new JDialog();                   
            fehlermeldung.add( new JLabel("Fehler bei Tabellenabfrage" + e ) );
            fehlermeldung.setSize( 500, 100 ); fehlermeldung.setVisible( true );

            return;
        }
        //Datenbankverbindung schließen!
        
    
}

in einer anderen Methode werden folgende Befehle nacheinander ausgeführt

Code:
 private void btCheckOutActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
            GregorianCalendar calendar = new GregorianCalendar(); 
            DateFormat dft = new SimpleDateFormat("dd.MM.yyyy HH:mm");
            Date date2 = calendar.getTime(); 
            String Zeit = dft.format(date2);
            
        int id = Integer.valueOf(String.valueOf(TableCheckOut.getValueAt(TableCheckOut.getSelectedRow(),0)));
        database.DataConnection.conUpdate("UPDATE Checkin SET Status = 4, Checkout = '"+Zeit+"' WHERE ID ="+id+"");
        database.DataConnection.conUpdate("INSERT INTO ArchivWD SELECT * FROM Checkin WHERE ID = "+id+"");
        try{
            Thread.sleep(1000);
        }catch(Exception e){
            
        }
        database.DataConnection.conUpdate("DELETE * FROM Checkin WHERE ID = "+id+"");
        
        try{
            Thread.sleep(1000);
        }catch(Exception e){
            
        }
        refresh();
    }

Die Methode refresh() beinhaltet auch mehrere SQL Befehle. Habe bis jetzt mit Thread.sleep() gearbeitet. Allerdings kann das ja nicht die wahre Lösung sein. Wie würde die richtige Vorgehensweise lauten.

Danke an alle Helfer!
 

Bleiglanz

Gesperrter Benutzer
der Aufruf stmt.executeUpdate( sqlQuery ); kehrt erst dann zurück wenn das Statement ausgeführt wurde - oder es fliegt eine Exception

verstehe also das Problem nicht ganz?

arbeitest du mit mehreren Threads - wenn ja, dann musst du entweder genau synchronisieren und/oder alles in eine Transaktion stecken, die du am Ende nochmal überprüfst
 
G

Guest

Gast
Ich bin der Meinung Java ist schneller als meine DB!

Denk die mal alle Thread.sleep() weg.

Dan habe ich ja 3 conUpdate() abfragen hintereinander.

1. Update
2. Insert
3. Delete

Eigentlich funktioniert alles soweit.

zu.1
UPDATE soll mir ja den Status auf 4 setzten.

zu 2
wenn das gemacht ist wird der komplette Datensatz in eine andere Tabelle geschoben

zu 3
und dann soll der Datensatz gelöscht werden.

wenn ich mir jetzt meine Tabellen in Access anschau ist folgendes Problem aufgetaucht.
Löschen und Insert hat funktioniert aber das Update nicht.

In der Tabelle ArchivWD ist der Status = 3!!!!

Wenn ich jetzt zwischen alle conUpdate() ein Thread.sleep() setzte funktioniert alles perfekt.
Das heisst für mich das Java nicht wartet bis der erste SQL befehl vollstandig ausgeführt wurde.

Problem erkannt??

MFG
 

AlArenal

Top Contributor
Wenn du nicht mit mehreren Threads arbeitet, kann Java nicht "schneller" sein, als die DB. Andernfalls wäre der Zustand der Anwendung dauerhaft nicht definiert und man könnte überhaupt keine ordentlichen Anwendungen schreiben, weil man nie sichergestellt bekommt das an Daten zu bekommen, was man meint abgefragt zu haben.

Ich weiß nicht was du dir für nen Bock geschossen hast, aber damit hat es nichts zu tun, ebensowenig wie die Erde keine Scheibe ist.
 

Bleiglanz

Gesperrter Benutzer
das mit dem "gleichzeitigen Anschauen" innerhalb von Access ist immer problematisch, probier mal

connection.setAutoCommit(true);

was ich machen würde:

1. preparedStatement verwenden (wegen Date und so)

2. Transaktion verwenden, könnte ja auch irgendwas ganz anderes mittendrin schiefgehen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Logikfrage: Auf zweites Result warten Datenbankprogrammierung 2
B SQLite Befehl bauen? Datenbankprogrammierung 4
F UPDATE - Befehl nur in einer Zeile Datenbankprogrammierung 11
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
M Update Befehl Datenbankprogrammierung 1
M Finde einen eifachen Befehl nicht Datenbankprogrammierung 4
M MySQL Befehl formatieren in MySQL Datenbankprogrammierung 4
E Datentyp enum und tinytext in sql-Befehl Datenbankprogrammierung 5
E falscher Befehl executeQuery() issue data Datenbankprogrammierung 12
S SQL Befehl: "suchwort" egal wo Datenbankprogrammierung 4
A Oracle Unbekannter Fehler bei insert Befehl Datenbankprogrammierung 3
A Oracle Update Befehl in Datenbank anhand einer Schleife Datenbankprogrammierung 8
GianaSisters SQL Befehl für allgemeine Datenbankexistenz Datenbankprogrammierung 4
S Write Befehl Datenbankprogrammierung 10
T ResultSet befehl für leere Spalte nicht lesen Datenbankprogrammierung 4
S Probleme mit INSERT Befehl Datenbankprogrammierung 11
S MySQL sql befehl in java klappt nicht Datenbankprogrammierung 3
J SQL Abfrage: Verschiedene Werte in einer Spalte mit einem Update Befehl? Datenbankprogrammierung 7
S Daten aus jTextfiled in DB schreiben - SQL Befehl Datenbankprogrammierung 2
A Count(*)-Befehl Datenbankprogrammierung 3
G Update-Befehl Fehlerhaft ?? Datenbankprogrammierung 2
G Update Befehl funkt nicht. WARUM? Datenbankprogrammierung 5
I Sql Befehl wird nicht ausgeführt Datenbankprogrammierung 8
A Problem mit einem Select-Befehl Datenbankprogrammierung 5
B [SQL] UPDATE oder REPLACE INTO Befehl Datenbankprogrammierung 10
B fehler bei select befehl Datenbankprogrammierung 5
T INSERT-Befehl in Java für Oracle Datenbankprogrammierung 4
B MySQL Befehl ausführen Datenbankprogrammierung 3
D Delete Befehl will irgendwie nicht Datenbankprogrammierung 8
M insert befehl funzt nicht!wo ist der fehler? Datenbankprogrammierung 5
G textfeld eingabe nicht in den SQL befehl einbinden Datenbankprogrammierung 14
S Denkfehler bei SQL-Befehl Datenbankprogrammierung 8
E Variablem in insert - Befehl Datenbankprogrammierung 3
S INSERT Befehl mit MySQL? Datenbankprogrammierung 7
C Problem mit Treiber? insert into Befehl geht nicht Datenbankprogrammierung 5
R Befehl für mysqldump Datenbankprogrammierung 18
N Insert-Befehl und JTextfield Datenbankprogrammierung 6
F suche MySQl-Befehl um Datensatz an Tabellenende zu schreiben Datenbankprogrammierung 2
Kirby.exe PreparedStatement wird nicht ausgeführt Datenbankprogrammierung 5
C MySQL SQL Statement wir nicht ausgeführt Datenbankprogrammierung 11
E Warum kann mein SQL-File nicht in DB2 ausgeführt werden? Datenbankprogrammierung 1
T f:event preRenderView Trigger wird nicht ausgeführt Datenbankprogrammierung 4
D "Distinct" wird nicht ausgeführt Datenbankprogrammierung 8
L SQL-Problem: Insert wird nicht ausgeführt Datenbankprogrammierung 5

Ähnliche Java Themen


Oben