Aria

Apache Derby – tutorial

Apache Derby w Windows: copy, delete, move

Zakładam, że:

– masz utworzony folder C:/Przyklady oraz folder C:/Przyklady1.

– masz dostępne IDE z dodanymi bibliotekami Derby. Ja używam IntelliJ IDEA v. Community.

Tworzenie i zamykanie bazy

W Apache Derby nie ma żadnego polecenia SQL typu CREATE DATABASE tworzącego bazę danych.

Baza danych jest tworzona przez utworzenie połączenia do bazy danych. Przy tworzeniu połączenia podajemy nazwę bazy danych, ewentualnie użytkownika i hasło i opcjonalnie inne właściwości. Jeżeli baza o tej nazwie istnieje zostaje ustanowione połączenie z tą bazą. Jeżeli baza nie istnieje, a uwzględniliśmy właściwość create=true, to baza o tej nazwie zostanie utworzona i zostanie utworzone połączenie do niej. Jeżeli nie uwzględniliśmy właściwości create lub podaliśmy create=false to baza danych nie jest tworzona.

Przy wbudowanych bazach danych najczęściej nie używa się nazwy użytkownika i hasła, gdyż aplikacja może kontrolować dostęp do bazy danych.

Utwórzmy bazę danych o podanej nazwie bez podawania żadnych dodatkowych parametrów poza create=true.

Jeżeli nie wyspecyfikowano położenia bazy danych to baza zostanie utworzona w katalogu bieżącym.

Przykładową bazę danych utworzymy przy użyciu klasy R025.java:

Klasa R025.java
        boolean started = DerbyUtil.startDerbyEngine("EmbeddedDriver");
        System.out.println(started);
        DerbyUtil.connectEmbeddedDB("C:/Przyklady/r025", ";create=true");
        boolean stopped = DerbyUtil.shutdownDerbyEngine();
        System.out.println(stopped);

Uruchamiamy połączenie z bazą danych, potem zamykamy silnik bazy danych, a więc i rozłączamy z baza danych.

Po uruchomieniu klasy w folderze C:/Przyklady zobaczymy bazę danych r025, a na konsoli:

true
true

Teraz możemy na bazie wykonac cały szereg innych czynności.

Kopiowanie bazy danych

Bazę danych, jak każdy folder Windows możemy skopiować przy użyciu znanych poleceń Windows albo mniej znanych poleceń wiersza poleceń Windows.

Jeśli chcemy użyć języka Java możemy napisać własną metodę copyDB:

 public static void copyDB(String pathIn, String pathOut) throws IOException {
        final Path source = Paths.get(pathIn);
        final Path target = Paths.get(pathOut);
        Files.walkFileTree(source, EnumSet.of(FileVisitOption.FOLLOW_LINKS),
                Integer.MAX_VALUE, new SimpleFileVisitor<>() {
                    @Override
                    public FileVisitResult preVisitDirectory(Path dir,
                                                             BasicFileAttributes attrs) throws IOException {
                        Path targetdir = target.resolve(source.relativize(dir));
                        try {
                            Files.copy(dir, targetdir);
                        } catch (FileAlreadyExistsException e) {
                            if (!Files.isDirectory(targetdir)) {
                                throw e;
                            }
                        }
                        return FileVisitResult.CONTINUE;
                    }

                    @Override
                    public FileVisitResult visitFile(Path file,
                                                     BasicFileAttributes attrs) throws IOException {
                        Files.copy(file,
                                target.resolve(source.relativize(file)));
                        return FileVisitResult.CONTINUE;
                    }
                });
    }

Metody użyjemy w klasie:

Klasa R026.java
 try {
            DerbyUtil.copyDB("C:/Przyklady/r025", "C:/Przyklady1/r025");
        } catch (IOException e) {
            e.printStackTrace();
        }

Po uruchomieniu klasy kopia bazy zostanie utworzona w folderze C:/Przyklady1.

Usuwanie bazy danych

Następnym problemem jest usunięcie bazy danych. Musi to być wykonane rekurencyjnie poprzez usunięcie plików z folderów, a następnie pustych folderów, etc.

W języku Java możemy napisać stosowną metodę. W klasie DerbyUtil przedstawiam metody pozwalające na usunięcie bazy danych:

  • dropDatabase(File dbPath)
  • dropDatabase(String dbPath)
  • deleteDB(String path)

Jednej z metod używamy w klasie:

Klasa R027.java
 try {
            DerbyUtil.deleteDB("C:/Przyklady1/r025");
        } catch (IOException e) {
            e.printStackTrace();
        }

Po uruchomieniu klasy – baza zostaje usunięta z folderu C:/Przyklady1.

Nieco inaczej usuwamy bazę danych umieszczoną wyłącznie w pamięci. Opiszemy to w innym wpisie.

Przenoszenie bazy danych

Przeniesienie bazy danych można wykonać przez połączenie dwóch operacji: kopiowania i usuwania. Wykonujemy to klasie R028.java:

   DerbyUtil.copyDB("C:/Przyklady/r025", "C:/Przyklady1/r025");
   DerbyUtil.deleteDB("C:/Przyklady/r025");

Po uruchomieniu baza została przeniesiona.

Pliki do ściągnięcia

Plik R025.zip

Plik R026.zip

Plik R027.zip

Plik R028.zip

Aktualny (tworzony narastająco) plik module-info.java

Aktualny (tworzony narastająco) plik DerbyUtil.java

Pliki tworzone narastająco zastępują poprzednie pliki o tej samej nazwie i działają dla wszystkich wcześniej opublikowanych przykładów we wszystkich wpisach w projekcie. W przypadku pliku module-info.java może być potrzebne skreślenie niepotrzebnych wpisów.