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 |
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 AdministratorGuide.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.