IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

9. diel - Derby DB - Vytvorenie a odstránenie databázy a tabuľky

V predchádzajúcom kvíze, Kvíz - DataSource a možnosti pripojenia Derby DB v Jave, sme si overili nadobudnuté skúsenosti z predchádzajúcich lekcií.

V minulej lekcii, Kvíz - DataSource a možnosti pripojenia Derby DB v Jave , sme experimentovali s embedded Derby DB databáz. Dnešné Java tutoriál bude opäť odpočinkový. Niektoré veci z tejto lekcie sme si už predviedli, ale teraz si ich zopakujeme a trochu rozšírime. Ide o základnú funkcionality. Bez tvorby a mazanie databáz a tabuliek sa nedá prakticky nič robiť. Predvedieme si dané operácie cez nástroj ij a tiež programovo cez Javu. Derby oproti napr. MySQL neumožňuje prihlásiť sa na daný SQL server a potom sa v ďalšom kroku pripojiť na iné databázy. Ak sa chceme pripojiť, je vždy už počas pripojenia nutné špecifikovať aj danú databázu.

Pripomeniem, že nástroj IJ sa nachádza v ..\db\bin\, pozri prvá a druhá lekcie.

Vytvorenie databázy

Najskôr databázu vytvoríme cez nástroj IJ a potom programovo cez Javu. Vykonáme pripojenie na databaze05 a pretože neexistuje, tak sa nám vytvorí. Ak by existovala, tak sa nevytvorí a vykoná sa bežné pripojenie. V prípade existujúcej databázy nedôjde k prepísanie starej databázy novú, čo znamená, že dáta v databáze (tabuľky, obsah tabuliek, práva prístupu) zostanú neporušená. Potom sa odpojíme a ukončíme nástroj IJ.

Vytvorenie databázy cez 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;

Vytvorenie databázy programovo (v Jave)

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");
    }
}

Programovo sa odpojíme zavolaním metódy close() alebo tou horšie variantom, zrušením referencie na objekt pripojenie.

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

Odstránenie databázy

Ako sme si uviedli v predchádzajúcich lekciách, ak nešpecifikuje cestu, kde chceme, aby sa databázy vytvorila, defaultne sa vytvorí adresár v ..\db\bin\.., ktorý bude obsahovať adresáre a súbory (pozri opäť prvá a druhá kapitola kurzu) . Prípadne ak využijeme nastavenie PATH a spustíme Derby server v inom adresári a tam sa pripojíme, potom databázy vznikne tam. Odstránenie Derby databázy cez ij nástroj alebo programovo cez Javu nejde (alebo som na to neprišiel). Databáza sa odstraňuje štandardným mazaním daného adresára predstavujúceho danú databázu v ..\db\bin\.., priamo cez operačný systém. Samozrejme je nutné odstrániť zadanú databázu keď na nej nie sme pripojení, inak nám ju OS odstrániť neumožní alebo s odstránením bude robiť problémy.

Parameter drop=true sa používa a funguje len 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");
}

Vytvorenie tabuľky v databáze

Vytvorenie tabuľky je základné operácie pri práci s databázou, bez nej nie je možné dáta do databázy uložiť. Pred definíciou tabuľky je nutné samozrejme najskôr vytvoriť alebo sa pripojiť na už existujúcu databázu. Tabuľku môžeme vytvoriť mnohými spôsobmi. Napr. manuálne nadefinovať a potom jednotlivé vstupy vložiť. Tu si napr. Vytvoríme tabuľku s celkom 4 stĺpci + 1 stĺpcom, ktorý slúži ako identifikátor. Prvý stĺpec je primárny kľúč, ďalšie tri sú textové reťazce a posledná je typu INT. Potom danú tabuľku vypíšeme a odpojíme sa od databázy. Tabuľka bude mať nasledujúce podobu

id firstName VARCHAR (20) lastName VARCHAR (20) title VARCHAR (20) hodnota INT
1 Franta novak LoremIpsum1115 48885
2 Jenda novak Lorem Ipsum 1115 5545
3 Lojzek novak LoremIpsum1115 4599
Tu si vytvorenie tabuľku predvedieme cez prí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 sa vyplní samy, preto je nezadávame. Tabuľku môžeme prípadne importovať cez SQL skript. Ďalšie techniky importu sú k dispozícii v manuáli Administrator­Guide.pdf. Spustenie SQL skriptu, ktorý by prípadne zakladacia príkazy obsahoval, by vyzeralo nasledovne:

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;

Vytvorenie tabuľky programovo

Teraz si predvedieme v Jave to isté, čo sme pred chvíľou vykonali cez 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();
    }
}

Samozrejme možno aj spustiť programovo SQL skript. Definícia metódy runScript() viď. API dokumentácia vyššie. ukážka:

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");
        }
    }
}

Odstránenie tabuľky z databázy

Najskôr si opäť prevedieme odstránenie tabuľky cez prí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 teraz si ukážeme ako tabuľku odstrániť programovo, teda to isté v Jave, čo sme pred chvíľou vykonali cez 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 budúcej lekcii, Derby DB - Práva prístupu - Autentizácia , nás čaká nastavenie a test systému práv prístupu.


 

Predchádzajúci článok
Kvíz - DataSource a možnosti pripojenia Derby DB v Jave
Všetky články v sekcii
DerbyDb
Preskočiť článok
(neodporúčame)
Derby DB - Práva prístupu - Autentizácia
Článok pre vás napísal Robert Michalovič
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovic
Aktivity