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

Lekce 25 - Derby DB - Metadata databáze a tabulky Nové

V minulé lekci, Derby DB - Schémata a tabulky, jsme si objasnili rozdíl mezi schématy a tabulkami, které jsme si zkusili vytvořit i odstranit.

V dnešním Java tutoriálu si ukážeme, jak získat informace z metadat databáze programově přes Javu.

Jak získat informace z metadat databáze přes Squirrel jsme si ukázali v této lekci. Nyní se tedy naučíme získat tyto informace programově přes Javu.

Objekty

Pro získání dat využijeme objekty DatabaseMetaData a ResultSetMetaData.

Objekt DatabaseMetaData

Objekt DatabaseMetaData disponuje get metodami pro získání informací z metadat databáze. Poskytuje přístup k těmto datům:

Objekt ResultSetMetaData

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Objekt ResultSetMetaData slouží k získání pomocných informací z tabulky. Tyto pomocné informace jsou například názvy a počty sloupců, počet řádků apod.:

Protože používáme universální Java API, jsou tyto objekty a jejich metody univerzální. Lze je použít i na jinou databázi např. MySQL, PostGreSQL, ...

Získání metadat databáze a tabulky programově přes Javu

Vytvoříme projekt v Java SE v IDE. V menu zvolíme 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 si vytvořili v této lekci.

Kód je následující:

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 metodě pripojeniKDatabazi() provedeme připojení k naší databázi databazeE01.

V metodě vypisemeMetaDataDatabaze() získáme objekt metadat databáze typu DatabaseMetaData. Z instance dbmd objektu typu DatabaseMetaData vypíšeme informace z volaných getter metod. Vypsané hodnoty zkontrolujeme s hodnotami získanými z prohlížeče databáze Squirrel.

V metodě vypisemeMetaDataTabulky() nejprve v objektu dotazu typu Statement, v ResultSet, nastavíme možnost pohybu kurzorem. Poté získáme naši tabulku tabulkaE01 pomocí SQL příkazu select vloženého do parametru metody executeQuery(). Z vysledek si necháme metodou getMetaData() vrátit metadata do instance metTab objektu typu ResultSetMetaData.

Nakonec z instance metTab vypíšeme ty výše zmíněné pomocné informace jako např. počet sloupců (getColumnCount()), názvy sloupců (getColumnName()) atd.

Výstup dat vidíme zde:

V příští lekci, Derby DB - Statement,PreparedStatement a CallableStatement 1, si ukážeme objekty dotazů Statement, PreparedStatement a CallableStatement.


 

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

 

Předchozí článek
Derby DB - Schémata a tabulky
Všechny články v sekci
DerbyDb
Článek pro vás napsal Robert Michalovič
Avatar
Jak se ti líbí článek?
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

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!