Anzeige

Derby DB restore-Problem


#1
Hallo Leute!

Ich habe eine Derby Datenbank lokal angelegt und möchte davon eine gesicherte Datenbank während der Laufzeit wiederherstellen.
Das restoren funktioniert zwar mit dem unteren Code, aber um auf die wiederhergestellte Datenbank zugreifen zu können muss ich zuerst einen Neustart des Programms durchführen.
Wie bekomme ich es hin das ich ohne das Programm neu starten zu müssen, die Daten direkt nach dem restoren wieder auslesen kann.
Die Ausgabe System.out.println(this.con.isClosed()) in der restore() Methode gibt zwar false, trotzdem bekomme ich beim Versuch aus der Datenbank zu lesen, folgende Fehlermeldung:
SCHWERWIEGEND: null
java.sql.SQLNonTransientConnectionException: Keine aktuelle Verbindung.

Bin für jede Hilfe Dankbar :)

Java:
public void connectDB() throws SQLException {
        try {
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
            this.con = DriverManager.getConnection("jdbc:derby:myDB;create=true");
        } catch (ClassNotFoundException e) {
            System.out.println(e.toString());
            System.exit(1);
        }
    }

public void backup(String path) {
        try {
            CallableStatement cs = this.con.prepareCall("CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE(?)");
            cs.setString(1, path);
            cs.execute();
            cs.close();
        } catch (SQLException ex) {
            Logger.getLogger(DBConnector.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

public void restore(String path) {
        try {
            String delete = "jdbc:derby:" + path + "\\myDB;shutdown=true";
            DriverManager.getConnection(delete);

        } catch (SQLException ex) {
            try {
                if (ex.getSQLState().equals("08006")) {
                    System.out.println("database did shut down correctly "+con.isClosed());
                    this.con = DriverManager.getConnection("jdbc:derby:myDB;restoreFrom=" +path+"\\myDB";
                    connectDB();
                    System.out.println(this.con.isClosed()); // Ausgabe = false
                } else {
                    System.out.println("database did not shut down correctly");
                }
            } catch (SQLException ex1) {
                Logger.getLogger(DBConnector.class.getName()).log(Level.SEVERE, null, ex1);
            }
        }
    }
 
Anzeige
Anzeige