NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

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

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:

Derby DB

Objekt ResultSetMetaData

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

Derby DB

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:

Derby DB

V příští lekci, Derby DB - Teorie objektů dotazů Statement, 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 3x (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
Derby DB
Přeskočit článek
(nedoporučujeme)
Derby DB - Teorie objektů dotazů Statement
Článek pro vás napsal Robert Michalovič
Avatar
Uživatelské hodnocení:
1 hlasů
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