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