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

Baze danych, jak każdy folder Windows możemy skopiowac przy użyciu znanych poleceń Windows albo mniej znanych poleceń wiersza poleceń Windows.
Jeśli chcemy użyć języka Java możemy napisac 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

Nastepnym problemem jest usunięcie bazy danych. Musi to być wykonane rekurencyjnie poprzez usunięcie plików z folderów, a nastepnie pustych folderów, etc.
W języku Java możemy napisac 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ętaz 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 mozna 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ągniecia

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 wszyskich wpisach w projekcie. W przypadku pliku module-info.java może być potrzebne skreślenie niepotrzebnych wpisów.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *