Lekce 9 - Derby DB - Vytvoření a odstranění databáze a tabulky
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 AdministratorGuide.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 následujícím kvízu, Kvíz - Embedded databáze a práce s tabulkami Derby DB v Javě, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.