Lekce 24 - Derby DB - Schémata a tabulky
V minulé lekci, Derby DB - prohlížení databáze přes SQuirreL SQL, jsme si nainstalovali prohlížeč databází SQuirreL SQL a připojili se k naší databázi.
V dnešním tutoriálu si rozebereme vnitřní strukturu DerbyDB a předvedeme si tvorbu a odstranění schémat.
Dnešní tutoriál navazuje na Derby DB - Informace, nastavení prostředí a Derby DB - Vytvoření a odstranění databáze a tabulky.
Schéma je označení pro abstraktní množinu(skupinu) místa, kde se tabulka(příp. tabulky) nachází. Jméno schématu je jméno celé množiny tabulek.
Schéma je pomocný zatřiďovací argument, který nám pomáhá tabulku správně umístit. Pokud bude třída v Java API tabulkou, pak schéma je balíček (package) třídy. Maximální délka jména schématu je 128 znaků. Schémata jsou pouze množiny (skupiny) pro tabulky, které nám umožňují lépe zatřídit tabulky do oblastí, které jsou pro nás nejvýhodnější. V každém schématu může být více tabulek.
Ve SQuirreL SQL si můžeme, po připojení k jakékoliv DerbyDB databázi, nechat zobrazit tato automatická defaultní schémata:
databaze DerbyDB ├── APP ├── NULLID ├── SQLJ ├── SYS ├── SYSCAT ├── SYSCS_DIAG ├── SYSCS_UTIL ├── SYSFUN ├── SYSIBM ├── SYSPROC ├── SYSSTAT └── ZALOHA1
Ve SQuirreL SQL defaultní schémata vidíme takto:
Tato schémata jsou k dispozici v každé databázi DerbyDB
kromě schématu ZALOHA1
, kterou jsme vytvořili v této
lekci.
Při tvorbě databáze se automaticky vytvoří schéma pod
názvem vlastníka databáze - tzv. uživatele, který se
připojí jako první a během připojení vzniká daná databáze. V našem
případě to byla ZALOHA1
. Pokud neurčíme u SQL syntaxe (např.
SELECT,CREATE,DROP,..) specifikaci schématu, pak schématem
je schéma vlastníka databáze(viz. příklad ZALOHA1),
případně uživatele, pod kterým se přihlásíme.
Každé schéma obsahuje tabulky. Tabulky se dělí na tabulky
obyčejné a systémové. Obyčejné tabulky
jsou ty, které tvoříme jako uživatelé. Kromě schématu SYS
,
které má vlastní systémové tabulky známé jako Derby system tables,
žádné jiné defaultní schémata systémové tabulky nemají:
databaze DerbyDB ├── APP ... ├── SYS │ ├── SYSALIASES │ ├── SYSCHECKS │ ├── ... │ ├── SYSUSERS │ └── SYSVIEWS ├── SYSCAT ...
Ve schématu SYS a jeho systémových tabulkách nebudeme mazat ani editovat záznamy. Když si je rozklikneme, uvidíme systémové a obyčejné tabulky:
databaze DerbyDB ├── APP ... ├── SYSSTAT └── ZALOHA1 └── TABULKAE01
Ve schématu ZALOHA1
vidíme tabulku
TABULKAE01
, kterou jsme vytvořili v této
lekci.
Obsah tabulky TABULKAE01
:
Tvorba schématu a tabulek přes IJ nástroj
Nejdříve si vytvoříme tabulku TabulkaA
a tabulku
TabulkaB
pod schématem ZALOHA1
:
ij> connect 'jdbc:derby://localhost:1527/databazeE01;user=zaloha1;password=heslo1'; ij> CREATE TABLE TabulkaA (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> CREATE TABLE TabulkaB (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> disconnect; ij> exit;
V SQuirreL SQL provedeme refresh. Prázdné tabulky
TabulkaA
a TabulkaB
poté uvidíme v schématu
ZALOHA1
:
Nyní si vyzkoušíme vytvořit schéma SCHEMA1
s tabulkami
TABULKA1_A
a TABULKA1_B
a schéma SCHEMAX
s tabulkou TABULKA_X1
:
databaze DerbyDB ├── ZALOHA1 │ ├── TABULKAA │ ├── TABULKAB │ └── TABULKAE01 ├── SCHEMA1 │ ├── TABULKA1_A │ └── TABULKA1_B └── SCHEMAX └── TABULKA_X1
IJ Příkazy vypadají takto:
ij> connect 'jdbc:derby://localhost:1527/databazeE01;user=zaloha1;password=heslo1'; ij> CREATE SCHEMA AUTHORIZATION SCHEMA1; ij> CREATE SCHEMA AUTHORIZATION SCHEMAX; ij> CREATE TABLE SCHEMA1.TABULKA1_A (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> CREATE TABLE SCHEMA1.TABULKA1_B (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> CREATE TABLE SCHEMAX.TABULKA_X1 (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> disconnect; ij> exit;
V SQuirreL SQL provedeme refresh. Poté prázdné tabulky
TABULKA1_A
a TABULKA1_B
uvidíme v schématu
SCHEMA1
:
Odstranění schématu přes IJ nástroj
Odstraníme schéma SCHEMA1
:
ij> connect 'jdbc:derby://localhost:1527/databazeE01;user=zaloha1;password=heslo1'; ij> drop table SCHEMA1.TABULKA1_B; ij> drop table SCHEMA1.TABULKA1_A; ij> drop schema SCHEMA1 RESTRICT; ij> disconnect; ij> exit;
Prvně odstraňujeme tabulky a poté schémata. Pokud
odstraňujeme tabulky, které nejsou ve schématu našeho připojeného účtu
(např. ZALOHA1
), musíme specifikovat schéma, ve kterém se
tabulka nachází.
Schéma SCHEMA1
už nevidíme, protože jsme ho odstranili:
Tvorba/Odstranění schémat programově přes Javu
Vytvoříme si projekt v Java SE. V menu vybereme File – New –
Java Project. Pojmenujeme projekt a nastavíme JRE Java8
.
Do CLASSPATH
našeho projektu přidáme tyto externí knihovny:
derbyclient.jar
derby.jar
derbytools.jar
derbyoptionaltools.jar
Připojovat se budeme na databázi a tabulku, kterou jsme vytvořili v této lekci.
Kód je následující:
package schemata; import java.sql.*; public class Schemata { static { try { Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } private static Connection connect=null; private static Statement statement = null; private static void pripojeniKDatabazi(){ try { connect = DriverManager.getConnection("jdbc:derby:D:\\JavaProjekty\\Java.DB.Derby\\X_DerbyDB\\bin\\databazeE01" + ";create=true;user=zaloha1;password=heslo1"); System.out.println("Podarilo se pripojit databazeE01"); } catch (Exception e) { System.out.println("\nNepodarilo se pripojit databazeE01"); e.printStackTrace(); } } private static void odpojimeDatabazi() { try { if (connect != null) connect.close(); System.out.println("Podarilo se odpojit od databaze databazeE01"); } catch (SQLException e) { System.out.println("\nNepodarilo se odpojit od databaze databazeE01"); e.printStackTrace(); } } private static void vytvoreniSchema(String jmenoSchema) { if(connect == null) return; try { statement = connect.createStatement(); statement.executeUpdate("create schema authorization "+jmenoSchema); System.out.println("Podarilo se vytvorit schema " +jmenoSchema); } catch (SQLException e) { System.out.println("Nepovedlo se vytvorit schema "+jmenoSchema); e.printStackTrace(); } } private static void vypsaniSchemat() { if(connect == null) return; try { DatabaseMetaData dbmd = connect.getMetaData(); ResultSet res = dbmd.getSchemas(); while(res.next()) { System.out.println(" "+res.getString("TABLE_SCHEM")); } System.out.println("Podarilo se provest vypis schemat"); } catch (SQLException e) { System.out.println("Nepovedlo se provest vypis schemat"); e.printStackTrace(); } } private static void odstraneniSchemat(String jmenoSchema) { if(connect == null) return; try { statement = connect.createStatement(); statement.executeUpdate("drop schema "+jmenoSchema+" restrict"); System.out.println("Podarilo se odstranit schema " +jmenoSchema); } catch (SQLException e) { System.out.println("Nepovedlo se odstranit schema "+jmenoSchema); e.printStackTrace(); } } public static void main(String[] args) { System.out.println("Start Programu "); pripojeniKDatabazi(); vytvoreniSchema("Schema1"); vytvoreniSchema("SchemaX"); vypsaniSchemat(); odstraneniSchemat("Schema1"); vypsaniSchemat(); odpojimeDatabazi(); System.out.println("Konec Programu "); } }
Metodou pripojeniKDatabazi()
provedeme připojení k naší
databázi databazeE01
. Poté zašleme metodě
vytvoreniSchema()
název prvního našeho schématu
Schema1
a pak i druhého schématu SchemaX
.
Vytvoření obou schémat zkontrolujeme pomocí metody
vypsaniSchemat()
, která nám obě schémata vypíše. Nakonec se
od databáze databazeE01
odpojíme kódem metody
odpojimeDatabazi()
.
Zde vidíme úspěšné vytvoření i odstranění schémat:
Takto je možné vytvořit i odstranit tabulku, jak jsme dělali v této lekci.
V příští lekci, Derby DB - Metadata databáze a tabulky, si předveme získání informací z objektů metadat databáze a tabulky.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 3x (7.14 kB)
Aplikace je včetně zdrojových kódů v jazyce Java