IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

25. diel - Derby DB - Metadáta databázy a tabuľky

V minulej lekcii, Derby DB - Schémy a tabuľky , sme si objasnili rozdiel medzi schémami a tabuľkami, ktoré sme si skúsili vytvoriť aj odstrániť.

V dnešnom Java tutoriále si ukážeme, ako získať informácie z metadát databázy programovo cez Javu.

Ako získať informácie z metadát databázy cez Squirrel sme si ukázali v tejto lekcii. Teraz sa teda naučíme získať tieto informácie programovo cez Javu.

Objekty

Pre získanie dát využijeme objekty DatabaseMetaData a ResultSetMetaData.

Objekt DatabaseMetaData

Objekt DatabaseMetaData disponuje get metódami pre získanie informácií z metadát databázy. Poskytuje prístup k týmto dátam:

DerbyDb

Objekt ResultSetMetaData

Objekt ResultSetMetaData slúži na získanie pomocných informácií z tabuľky. Tieto pomocné informácie sú napríklad názvy a počty stĺpcov, počet riadkov pod .:

DerbyDb

Pretože používame univerzálny Java API, sú tieto objekty a ich metódy univerzálne. Možno ich použiť aj na inú databázu napr. MySQL, PostgreSQL, ...

Získanie metadát databázy a tabuľky programovo cez Javu

Vytvoríme projekt v Java SE v IDE. V menu zvolíme 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 si vytvorili v tejto lekcii.

Kód je nasledujúci:

package metadata;
import java.sql.*;
public class DatabazeMetaData {
    static {
        try {
            Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();  }
        catch (Exception e) {
            System.out.println("Problem s driverem");
            e.printStackTrace();    }
    }
    private static Connection connect = null;
    private static String [] seznamSloupcu = null;
    private static ResultSet vysledek = 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 vypisemeMetaDataDatabaze() {
        if(connect == null) return;
        try {
            DatabaseMetaData dbmd = connect.getMetaData();
            System.out.println("Podarilo se ziskat MetaData Databaze : \n");
            System.out.println("Ziskame jmeno driveru(connectoru) : "+dbmd.getDriverName());
            System.out.println("Ziskame verze driveru(connectoru) : "+dbmd.getDriverVersion());
            System.out.println("Ziskame jmeno databaze : "+dbmd.getDatabaseProductName());
            System.out.println("Ziskame verzi databaze : "+dbmd.getDatabaseProductVersion());
            System.out.println("Ziskame Major verzi databaze : "+dbmd.getDatabaseMajorVersion());
            System.out.println("Ziskame Minor verzi databaze : "+dbmd.getDatabaseMinorVersion());
            System.out.println("Ziskame seznam systemovych funkci : "+dbmd.getSystemFunctions() );
            System.out.println("URL adresy databaze : "+dbmd.getURL());
            System.out.println("Jmeno aktualne prihlaseneho uzivatele : "+dbmd.getUserName());
        }
        catch (SQLException e) {
            System.out.println("Nepovedlo se ziskat MetaData Databaze");
            e.printStackTrace();    }
    }
    private static void vypisemeMetaDataTabulky() {
        if(connect == null) return;
        try {
            Statement dotaz = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            vysledek = dotaz.executeQuery("select * from zaloha1.tabulkaE01 order by id");
            ResultSetMetaData metTab = vysledek.getMetaData();
            System.out.println("\nPodarilo se ziskat MetaData Tabulky : \n");
            System.out.println("Pocet sloupcu tabulky : "+metTab.getColumnCount());
            vysledek.last();
            System.out.println("Pocet radku tabulky : "+vysledek.getRow());
            vysledek.beforeFirst();
            seznamSloupcu = new String[metTab.getColumnCount()];
            for(int i=0; i< seznamSloupcu.length; i++){
            seznamSloupcu[i]=metTab.getColumnName(i+1);}
            System.out.println("Vypis jmen sloupcu tabulky : "+java.util.Arrays.toString(seznamSloupcu)+"\n");

        }
        catch (SQLException e) {
            System.out.println("Nepovedlo se ziskat MetaData Databaze");
            e.printStackTrace();    }
    }
    private static void vypisemeTabulku() {
        if(connect == null) return;
        if(seznamSloupcu == null) return;
        if(vysledek == null) return;
        for(String s : seznamSloupcu) {
            System.out.print(s+"\t");   }
        System.out.println();
        try {
            while(vysledek.next()) {
                System.out.println(vysledek.getInt(1)+"\t"+vysledek.getString(2)+"\t\t"+vysledek.getString(3)+"\t"+vysledek.getString(4)+"\t"+vysledek.getInt(5));
            }
        }
        catch (SQLException e) {
            System.out.println("Nepovedlo se vypsat Tabulku");
            e.printStackTrace();    }
        System.out.println("\nPovedlo se vypsat Tabulku");
    }
    public static void main(String[] args) {
        System.out.println("Start Programu ");
        pripojeniKDatabazi();
        vypisemeMetaDataDatabaze();
        vypisemeMetaDataTabulky();
        vypisemeTabulku();
        odpojimeDatabazi();
        System.out.println("Konec Programu ");
    }
}

V metóde pripojeniKDatabazi() vykonáme pripojenie k našej databáze databazeE01.

V metóde vypisemeMetaDataDatabaze() získame objekt metadát databázy typu DatabaseMetaData. Z inštancie dbmd objektu typu DatabaseMetaData vypíšeme informácie z volaných getter metód. Vypísané hodnoty skontrolujeme s hodnotami získanými z prehliadača databázy Squirrel.

V metóde vypisemeMetaDataTabulky() najprv v objekte dotaze typu Statement, v ResultSet, nastavíme možnosť pohybu kurzorom. Potom získame našu tabuľku tabulkaE01 pomocou SQL príkazu select vloženého do parametra metódy executeQuery(). Z vysledek si necháme metódou getMetaData() vrátiť metadáta do inštancie metTab objektu typu ResultSetMetaData.

Nakoniec z inštancie metTab vypíšeme tie vyššie spomínané pomocné informácie ako napr. Počet stĺpcov (getColumnCount()), názvy stĺpcov (getColumnName()) atď.

Výstup dát vidíme tu:

DerbyDb

V budúcej lekcii, Derby DB - Statement, PreparedStatement a CallableStatement 1 , si ukážeme objekty otázok Statement, PreparedStatement a CallableStatement.


 

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.07 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Derby DB - Schémy a tabuľky
Všetky články v sekcii
DerbyDb
Preskočiť článok
(neodporúčame)
Derby DB - Statement, PreparedStatement a CallableStatement 1
Č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