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

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:

schémy - DerbyDb

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: DerbyDb

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:

DerbyDb

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:

DerbyDb

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:

DerbyDb

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
derbyoptional­tools.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:

DerbyDb

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é 2x (7.14 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Kvíz - Ukladanie a získavanie objektov UDT Derby DB v Jave
Všetky články v sekcii
DerbyDb
Preskočiť článok
(neodporúčame)
Derby DB - Metadáta databázy a tabuľky
Č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