Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
Využij akce až 80 % zdarma při nákupu e-learningu - více informací. Zároveň pouze tento týden sleva až 80 % na e-learning týkající se Swift
discount week 80

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

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:

Objekt ResultSetMetaData

Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!

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

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:

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é 1x (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
Článok pre vás napísal Robert Michalovič
Avatar
Ako sa ti páči článok?
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

 

 

Komentáre

Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!