Lekce 9 - Derby DB - Vytvoření a odstranění databáze a tabulky

Java Databáze Apache Derby Derby DB - Vytvoření a odstranění databáze a tabulky

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, Derby DB - Embedded (vestavěná databáze), jsme experimentovali s embedded Derby DB databází. Dnešní Java tutoriál bude opět odpočinkový. Některé věci z této lekce jsme si již předvedli, ale nyní si je zopakujeme a trochu rozšíříme. Jedná se o základní funkcionality. Bez tvorby a mazání databází a tabulek se nedá prakticky nic dělat. Předvedeme si dané operace přes nástroj ij a také programově přes Javu. Derby oproti např. MySQL neumožňuje přihlásit se na daný SQL server a poté se v dalším kroku připojit na jiné databáze. Pokud se chceme připojit, je vždy již během připojení nutné specifikovat i danou databázi.

Připomenu, že nástroj IJ se nachází v ..\db\bin\, viz první a druhá lekce.

Vytvoření databáze

Nejdříve databázi vytvoříme přes nástroj IJ a poté programově přes Javu. Provedeme připojení na databaze05 a protože neexistuje, tak se nám vytvoří. Pokud by existovala, tak se nevytvoří a provede se běžné připojení. V případě existující databáze nedojde k přepsání staré databáze novou, což znamená, že data v databázi (tabulky, obsah tabulek, práva přístupu) zůstanou neporušena. Poté se odpojíme a ukončíme nástroj IJ.

Vytvoření databáze přes IJ

ij version 10.13
/****   pripojime se k databazi, pokud neexistuje, vytvorime ji ****/
ij> connect 'jdbc:derby:databaze05;create=true;user=uzivatel5;password=heslo5';
/****   odpojime se od databaze ****/
ij> disconnect;
/****   ukoncime ij program****/
ij> exit;

Vytvoření databáze programově (v Javě)

private java.sql.Connection connect;

private static void vytvoreniDatabaze() {
        try {
                connect = DriverManager.getConnection("jdbc:derby://localhost:1527/databaze05;create=true;user=uzivatel5;password=heslo5");
                System.out.println("Podarilo se pripojit a vytvorit databazi05");
        }
        catch (Exception e) {
                System.err.println("Nepodarilo se pripojit a vytvořit databazi05");
        }
}

Programově se odpojíme zavoláním metody close() nebo tou horší variantou, zrušením reference na objekt připojení.

private static void odpojimeDatabazi() {
        try {
                if (connect != null)
                        connect.close();
                System.out.println("\nPodarilo se odpojit od databaze");
        } catch (SQLException e) {
                e.printStackTrace();
        }
}

Odstranění databáze

Jak jsme si uvedli v předcházejících lekcích, pokud nespecifikujeme cestu, kde chceme, aby se databáze vytvořila, defaultně se vytvoří adresář v ..\db\bin\.., který bude obsahovat adresáře a soubory (viz opět první a druhá kapitola kurzu). Případně pokud využijeme nastavení PATH a spustíme Derby server v jiném adresáři a tam se připojíme, pak databáze vznikne tam. Odstranění Derby databáze přes ij nástroj nebo programově přes Javu nejde (nebo jsem na to nepřišel). Databáze se odstraňuje standardním mazáním daného adresáře představujícího danou databázi v ..\db\bin\.., přímo přes operační systém. Samozřejmě je nutné odstranit danou databázi pouze když na ní nejsme připojení, jinak nám ji OS odstranit neumožní nebo s odstraněním bude dělat problémy.

Parametr drop=true se používá a funguje pouze u in-memory databází.

try {
        connect = DriverManager.getConnection("jdbc:derby://localhost:1527/memory:databaze05;drop=true;user=uzivatel5;password=heslo5");
        System.err.println("Nepodarilo se odstranit z pameti");
} catch (Exception e) {
        System.out.println("Podarilo se odstranit z pameti");
}

Vytvoření tabulky v databázi

Vytvoření tabulky je základní operace při práci s databází, bez ní nelze data do databáze uložit. Před definicí tabulky je nutné samozřejmě nejdříve vytvořit nebo se připojit na již existující databázi. Tabulku můžeme vytvořit mnoha způsoby. Např. manuálně nadefinovat a poté jednotlivé vstupy vložit. Zde si např. vytvoříme tabulku s celkem 4 sloupci + 1 sloupcem, který slouží jako identifikátor. První sloupec je primární klíč, další tři jsou textové řetězce a poslední je typu INT. Poté danou tabulku vypíšeme a odpojíme se od databáze. Tabulka bude mít následující podobu

id firstName VARCHAR(20) lastName VARCHAR(20) title VARCHAR(20) hodnota INT
1 Franta Novak LoremIpsum1115 48885
2 Jenda Novak LoremIpsum 1115 5545
3 Lojzek Novak LoremIpsum1115 4599

Zde si vytvoření tabulku předvedeme přes příkaz ij:

ij> connect 'jdbc:derby://localhost:1527/databaze06;create=true;user=Uzivatel6;password=Heslo6';
ij> CREATE TABLE dat6Tab1 (id INT not null primary key GENERATED ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1),firstName VARCHAR(20), lastName VARCHAR(20), title VARCHAR(20), hodnota INT );
ij> INSERT INTO dat6Tab1 (firstName,lastName,title,hodnota) VALUES ('Franta','Novak','LoremIpsum1115',48885);
ij> INSERT INTO dat6Tab1 (firstName,lastName,title,hodnota) VALUES ('Jenda','Novak','LoremIpsum1115',5545);
ij> INSERT INTO dat6Tab1 (firstName,lastName,title,hodnota) VALUES ('Lojzek','Novak','LoremIpsum1115',4599);
ij> SELECT * FROM dat6Tab1 ORDER BY id;
ij> disconnect;
ij> exit;

Hodnoty ID se vyplní samy, proto je nezadáváme. Tabulku můžeme případně importovat přes SQL skript. Další techniky importu jsou k dispozici v manuálu Administrator­Guide.pdf. Spuštění SQL skriptu, který by případně zakládací příkazy obsahoval, by vypadalo následovně:

ij> connect 'jdbc:derby://localhost:1527/databaze06;create=true;user=Uzivatel6;password=Heslo6';
ij> run 'D:\Dokumenty\Java\ProjektDERBY06\datab Emploee.sql';
ij> disconnect;
ij> exit;

Vytvoření tabulky programově

Nyní si předvedeme v Javě to samé, co jsme před chvílí provedli přes nástroj IJ.

private java.sql.Connection connect;
private java.sql.Statement statement;

private static void vytvoreniDatabazeSDaty() {
        // vytvoříme databázi
        try {
                connect = DriverManager.getConnection("jdbc:derby://localhost:1527/databaze06;create=true;user=uzivatel6;password=heslo6");
                System.out.println("Podarilo se pripojit a vytvorit databazi06");
        }
        catch (Exception e) {
                System.err.println("Nepodarilo se pripojit a vytvořit databazi06");
        }
        //  Vytvoříme tabulku
        if (connect == null)
                return;
        try {
                statement = connect.createStatement();
                statement.executeUpdate("create table dat6Tab1 (id INT not null primary key GENERATED ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1),"
                + "firstName VARCHAR(20), lastName VARCHAR(20), title VARCHAR(20), hodnota INT )");
                System.out.println("Podarilo se vytvorit tabulku dat6Tab1");
        }
        catch (SQLException e) {
                System.out.println("Nepovedlo se vytvorit tabulku dat6Tab1");
                e.printStackTrace();
        }
        //  Vytvoříme data
        if (statement == null)
                return;
        try {   //  každý executeUpdate provede uložení do databáze
                statement.executeUpdate("INSERT INTO dat6Tab1 (firstName,lastName,title,hodnota) VALUES ('Franta','Novak','LoremIpsum1115',48885)");
                statement.executeUpdate("INSERT INTO dat6Tab1 (firstName,lastName,title,hodnota) VALUES ('Jenda','Novak','LoremIpsum1115',5545)");
                statement.executeUpdate("INSERT INTO dat6Tab1 (firstName,lastName,title,hodnota) VALUES ('Lojzek','Novak','LoremIpsum1115',4599)");
                System.out.println("Podarilo se ulozit data");
        }
        catch (SQLException e) {
                System.out.println("Nepovedlo se ulozit data");
                e.printStackTrace();
        }
}

Samozřejmě lze i spustit programově SQL skript. Definice metody runScript() viz. API dokumentace výše. Ukázka:

private static void vytvoreniDatabazeSDaty() {
        // vytvoříme databázi
        try {
                connect = DriverManager.getConnection("jdbc:derby://localhost:1527/databaze06;create=true;user=uzivatel6;password=heslo6");
                System.out.println("Podarilo se pripojit a vytvorit databazi06");
        }
        catch (Exception e) {
                System.err.println("Nepodarilo se pripojit a vytvořit databazi06"); }
                // Vytvoříme tabulku
                System.out.println("Pokusime se spustit skript");
                if (connect == null)
                        return;
                try {
                        org.apache.derby.tools.ij.runScript(connect,new FileInputStream(new File("D:/datab Emploee.sql")),"UTF-8",System.out,"UTF-8");
                        System.out.println("Script probehl");
                } catch(Exception e) {
                        System.err.println("Script neprobehl");
                }
        }
}

Odstranění tabulky z databáze

Nejdříve si opět provedeme odstranění tabulky přes příkaz ij:

ij> connect 'jdbc:derby://localhost:1527/databaze06;create=true;user=Uzivatel6;password=Heslo6';
ij> show tables;
ij> drop table dat6Tab1;
ij> disconnect;
ij> exit;

A nyní si ukážeme jak tabulku odstranit programově, tedy to samé v Javě, co jsme před chvílí provedli přes nástroj IJ:

private static void smazemeTabulku() {
        try {
                connect = DriverManager.getConnection("jdbc:derby://localhost:1527/databaze06;user=uzivatel6;password=heslo6");
                System.out.println("Podarilo se pripojit a vytvorit databazi06");
        }
        catch (Exception e) {
                System.err.println("Nepodarilo se pripojit a vytvořit databazi06");
        }

        try {
                statement = connect.createStatement();
                statement.executeUpdate("DROP TABLE dat6Tab1");
                System.out.println("Podarilo se smazat tabulku");
        } catch (SQLException e) {
                e.printStackTrace();
                System.out.println("Nepodarilo se smazat tabulku");
        }
}

V příští lekci, , nás čeká nastavení a test systému práv přístupu.


 

 

Článek pro vás napsal Robert Michalovič
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovi%C4%8D-8a9b9498
Miniatura
Všechny články v sekci
DerbyDb
Aktivity (2)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!