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

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:

Schemata - Derby DB

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: Derby DB

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:

Derby DB

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:

Derby DB

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:

Derby DB

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

Derby DB

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 2x (7.14 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Předchozí článek
Derby DB - prohlížení databáze přes SQuirreL SQL
Všechny články v sekci
Derby DB
Přeskočit článek
(nedoporučujeme)
Derby DB - Metadata databáze a tabulky
Článek pro vás napsal Robert Michalovič
Avatar
Uživatelské hodnocení:
Ještě nikdo nehodnotil, buď první!
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