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:
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 .:
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
derbyoptionaltools.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é 3x (7.07 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java