24. diel - Derby DB - Schémy a tabuľky
V predchádzajúcom kvíze, Kvíz - Ukladanie a získavanie objektov UDT Derby DB v Jave, sme si overili nadobudnuté skúsenosti z predchádzajúcich lekcií.
V dnešnom tutoriále si rozoberieme vnútornú štruktúru DerbyDB a predvedieme si tvorbu a odstránenie schém.
Dnešné tutoriál nadväzuje na Derby DB - Informácie, nastavenie prostredia a Derby DB - Vytvorenie a odstránenie databázy a tabuľky.
Schéma je označenie pre abstraktné množinu (skupinu) miesta, kde sa tabuľka (príp. Tabuľky) nachádza. Meno schéme je meno celej množiny tabuliek.
Schéma je pomocný zatřiďovací argument, ktorý nám pomáha tabuľku správne umiestniť. Pokiaľ bude trieda v Java API tabuľkou, potom schéma je balík (package) triedy. Maximálna dĺžka mena schéme je 128 znakov. Schémy sú iba množiny (skupiny) pre tabuľky, ktoré nám umožňujú lepšie zatriediť tabuľky do oblastí, ktoré sú pre nás najvýhodnejšie. V každom schéme môže byť viac tabuliek.
Vo Squirrel SQL si môžeme, po pripojení k akejkoľvek DerbyDB databáze, nechať zobraziť táto automatická defaultný schémy:
databaze DerbyDB ├── APP ├── NULLID ├── SQLJ ├── SYS ├── SYSCAT ├── SYSCS_DIAG ├── SYSCS_UTIL ├── SYSFUN ├── SYSIBM ├── SYSPROC ├── SYSSTAT └── ZALOHA1
Vo Squirrel SQL defaultný schémy vidíme takto:
Tieto schémy sú k dispozícii v každej databáze DerbyDB
okrem schémy ZALOHA1
, ktorú sme vytvorili v tejto
lekcii.
Pri tvorbe databázy sa automaticky vytvorí schéma pod
názvom vlastníka databázy - tzv. Užívateľa, ktorý sa
pripojí ako prvý a počas pripojenia vzniká daná databázy. V našom
prípade to bola ZALOHA1
. Ak neurčíme u SQL syntaxe (napr.
SELECT, CREATE, DROP, ..) špecifikáciu schémy, potom
schémou je schéma vlastníka databázy (viď. Príklad
ZALOHA1), prípadne užívateľa, pod ktorým sa prihlásime.
Každé schéma obsahuje tabuľky. Tabuľky sa delí na tabuľky
obyčajné a systémové. Obyčajné tabuľky
sú tie, ktoré tvoríme ako používatelia. Okrem schémy SYS
,
ktoré má vlastné systémové tabuľky známe ako Derby system tables,
žiadne iné defaultný schémy systémové tabuľky nemajú:
databaze DerbyDB ├── APP ... ├── SYS │ ├── SYSALIASES │ ├── SYSCHECKS │ ├── ... │ ├── SYSUSERS │ └── SYSVIEWS ├── SYSCAT ...
V schéme SYS a jeho systémových tabuľkách nebudeme meniť ani editovať záznamy. Keď si ich rozkliknite, uvidíme systémové a obyčajné tabuľky:
databaze DerbyDB ├── APP ... ├── SYSSTAT └── ZALOHA1 └── TABULKAE01
V schéme ZALOHA1
vidíme tabuľku
TABULKAE01
, ktorú sme vytvorili v tejto
lekcii.
Obsah tabuľky TABULKAE01
:
Tvorba schémy a tabuliek cez IJ nástroj
Najskôr si vytvoríme tabuľku TabulkaA
a tabuľku
TabulkaB
pod schémou 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 vykonáme refresh. Prázdne tabuľky
TabulkaA
a TabulkaB
potom uvidíme v schéme
ZALOHA1
:
Teraz si vyskúšame vytvoriť schému SCHEMA1
s tabuľkami
TABULKA1_A
a TABULKA1_B
a schéma SCHEMAX
s tabuľkou TABULKA_X1
:
databaze DerbyDB ├── ZALOHA1 │ ├── TABULKAA │ ├── TABULKAB │ └── TABULKAE01 ├── SCHEMA1 │ ├── TABULKA1_A │ └── TABULKA1_B └── SCHEMAX └── TABULKA_X1
IJ Príkazy vyzerajú 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 vykonáme refresh. Potom prázdne tabuľky
TABULKA1_A
a TABULKA1_B
uvidíme v schéme
SCHEMA1
:
Odstránenie schémy cez IJ nástroj
Odstránime 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;
Najprv odstraňujeme tabuľky a potom schémy. Ak odstraňujeme
tabuľky, ktoré nie sú v schéme nášho pripojeného účtu (napr.
ZALOHA1
), musíme špecifikovať schému, v ktorom sa tabuľka
nachádza.
Schéma SCHEMA1
už nevidíme, pretože sme ho odstránili:
Tvorba / Odstránenie schém programovo cez Javu
Vytvoríme si projekt v Java SE. V menu vyberieme File - New - Java
Project. Pomenujeme projekt a nastavíme JRE Java8
. Do
CLASSPATH
nášho projektu pridáme tieto externé knižnice:
derbyclient.jar
derby.jar
derbytools.jar
derbyoptionaltools.jar
Pripájať sa budeme na databázu a tabuľku, ktorú sme vytvorili v tejto lekcii.
Kód je nasledujúci:
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 "); } }
Metódou pripojeniKDatabazi()
vykonáme pripojenie k našej
databáze databazeE01
. Potom zašleme metóde
vytvoreniSchema()
názov prvého nášho schémy
Schema1
a potom aj druhého schémy SchemaX
.
Vytvorenie oboch schém skontrolujeme pomocou metódy
vypsaniSchemat()
, ktorá nám obe schémy vypíše. Nakoniec sa od
databázy databazeE01
odpojíme kódom metódy
odpojimeDatabazi()
.
Tu vidíme úspešné vytvorenie aj odstránenie schém:
Takto je možné vytvoriť aj odstrániť tabuľku, ako sme robili v tejto lekcii.
V budúcej lekcii, Derby DB - Metadáta databázy a tabuľky , si predvetie získanie informácií z objektov metadát databázy a tabuľky.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 3x (7.14 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java