SQL-Skript wirklich ausgeführt?

Hallo,
ich habe die folgende Methode:

              Connection con=null;
              boolean isScriptExecuted = false;
              
              
              try{
                 
                 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                 con=DriverManager.getConnection("jdbc:odbc:Test");
                 System.out.println("Connected");
                 Statement stmnt =con.createStatement();
                 
                String aSQLScriptFilePath = "Skip-Pfad";
                 
                try {
                BufferedReader in = new BufferedReader(new FileReader(aSQLScriptFilePath));
                String str;
                StringBuffer sb = new StringBuffer();
                while ((str = in.readLine()) != null) {
                sb.append(str + "
 ");
                }
                in.close();
                stmnt.executeUpdate(sb.toString());
                
                isScriptExecuted = true;
                
                
                
                } catch (Exception e) {
                System.err.println("Failed to Execute" + aSQLScriptFilePath +". The error is"+ e.getMessage());
                }
            
             
                 }catch(Exception e){
                  System.out.println(e.getMessage());
                 }
              ResultSet rs = null;
                ResultSetMetaData rsmd = null;
              
              return isScriptExecuted;
        }```

hier wird bisher nur das Skript eingelesen und an die Datenbank geschickt, ich möchte allerdings, eine Bestätigung, dass das Skript ausgeführt wurde und dann erst isScriptExecuted auf true setzen. wie kann ich dieses Problem lösen?

hast du ganz konkrete Problemvorstellungen, schon Szenarien in denen der Code versagt?
allgemein ist das Konstrukt ‘Exception aus der DB, ansonsten ok’ recht verbreitet und verläßlich,

ein leeres Skript zu lesen solltest du vielleicht abfangen, aber davon abgesehen?..

Wenn es nur um ausgeführt oder nicht geht, dann siehe SlaterB’s Post. (finde den Reim übrigens sehr gelungen :slight_smile: ). Wenn Du mehr transparenz möchtest, werte den int aus, den executeUpdate zurück gibt. Wenn Du vorher bestimmen kannst, wieviele Datensätze upgedatet werden müssten, könntest Du den Rückgabewert mit dem Erwartungswert vergleichen.

ich frage mich halt ob es funktioniert wenn ich größere skripte ausführe, die gleiche Tabellen bearbeiten, beispielsweise skript1 20 tabellen erstellt und befüllt und skript2 dann auf tabelle 19 zugreifen und wert 3 ändern will. Ob dieses funktioniert oder ob es passieren kann das Skrip 1 erst 10 tabellen erstellt hat und dann bereits skript2 versucht tabelle 19 zu erreichen die folglich ja nicht existiert.
Dafür müsse ich halt wissen ob executeUpdatewartet bis von der SQL Daenbank kommt Erfolgreich oder ob executeUpdate einfach nur die anfrage an die SQL-Datenbank schickt aber nicht wartet ob diese erfolgreich war.

von Warten ist auszugehen, auch wenn ich das gerade nicht überzeugender untermauern kann,
dürfte in Grundlagen von JDBC sicher genauer drinstehen, nebenläufige Verarbeitung wäre exotisch

Überprüfung soweit möglich selber durchführen, baue einen einfachen Fehler in die 20. Tabellendefinition ein -> Exception,
auch schiere Wartezeit bei MB an Skripten ein Faktor

nach mehreren tests scheint das tatsächlich zu stimmen, es wird gewartet bis das skript fertig ist, wenn ein fehler auftritt wird ein kompletter rollback gemacht.
Da hab ich Java wohl zuviel zugetraut :smiley: