IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

26. diel - Derby DB - Statement, PreparedStatement a CallableStatement 1

V minulej lekcii, Derby DB - Metadáta databázy a tabuľky , sme si predviedli získanie informácií z objektov metadát databázy a tabuľky.

V dnešnom Java tutoriálu si preberieme objekty otázok Statement, PreparedStatement a CallableStatement.

Objekty otázok sú v databázach dôležité. Ide o štandardné objekty, ktoré sú dostupné vJava API balíčkoch. Tieto objekty dotazov sú popísané v dokumentáciách Java API a DerbyDB (referencie Derby).

Objekty dotazov vykonáva dotaz v SQL syntax nad databázami, z ktorých tak získajú odpoveď väčšinou vo forme objektu ResultSet.

Postupne si tu preberieme všetky dotazových objekty. Nižšie uvedené príklady si vyskúšame na našu databázu DerbyDatabE01 a tabuľke TABULKAE01.

použitá tabuľka - DerbyDb

Statement

Štandardné, najjednoduchšie a najčastejšie používaný je objekt dotazu Statement. Objekt dotazu Statement je hlavný dopytovať objekt a zvyšné objekty z neho vychádza a rozširujú ho. Je výhodný pre použitie statických (nemenných) dotazov, čiže otázok bez modifikovateľných parametrov.

Príklad 1

Vyskúšame si tento príklad použitia dotazového objektu Statement:
if(connect == null) return;
Statement statement = connect.createStatement();
ResultSet odpoved = statement.executeQuery("SELECT * FROM tabulkaE01 ORDER BY id");

Otázka uloží do ResultSet všetky riadky tabuľky TABULKAE01 zotriedené podľa id.

Príklad 2

Teraz si vyskúšame iný príklad použitia dotazového objektu Statement:
if(connect == null) return;
Statement statement = connect.createStatement();
ResultSet odpoved = statement.executeQuery("SELECT * FROM tabulkaE01 WHERE firstName='Jmeno3'");

Otázka uloží do ResultSet iba riadky, kde sa nachádza v stĺpci FIRSTNAME hodnota Jmeno3.

PreparedStatement

Objekt dotazu PreparedStatement je predpripraveným dotazom, ktorý je predkompilované a uložený v objekte. Pri jeho opakovanom volaní netreba nová inicializácia, čím ušetríme strojový čas a beh programu je efektívnejšie. Otázka vracia objekt typu PreparedStatement.

Rozhranie PreparedStatement umožnuje meniť parametre za behu. Kľúčové výberové kritérium môžeme dosadiť neskôr, než vytvoríme objekt dotazu. To si teraz vyskúšame.

Príklad 1

Vyskúšame si otázku, ktorý do ResultSet uloží riadky našej tabuľky TABULKAE01, ktoré obsahujú v stĺpci FIRSTNAME hodnotu Jmeno6. Skúsime dodať výberové kritérium až po vytvorení objektu dotazu. Namiesto hľadané hodnoty Jmeno6 vložíme do dotazu výraz (?). Hodnotu Jmeno6 dosadíme do objektu dotazu statement miesto (?) Až v nasledujúcom riadku:
if(connect == null) return;
ResultSet odpoved = null;
PreparedStatement statement = connect.prepareStatement("SELECT * FROM tabulkaE01 WHERE firstName=(?) ");
statement.setString(1,"Jmeno6");
odpoved = statement.executeQuery();

Príklad 2

Teraz si vyskúšame komplikovanejšia dotaz, ktorý do ResultSet uloží riadky našej tabuľky TABULKAE01, ktoré obsahujú v stĺpci FIRSTNAME hodnotu Jmeno4 a zároveň v stĺpci HODNOTA hodnotu 444444:
if(connect == null) return;
ResultSet odpoved = null;
PreparedStatement statement = connect.prepareStatement("SELECT * FROM tabulkaE01 WHERE firstName=(?) AND hodnota=(?) ");
statement.setString(1,"Jmeno4");
statement.setInt(2,444444);
odpoved = statement.executeQuery();

Príklad 3

Nakoniec si vyskúšame dotaz, ktorý do ResultSet uloží riadky našej tabuľky TABULKAE01, ktoré obsahujú v stĺpci FIRSTNAME hodnotu Jmeno4, alebo hodnotu Jmeno6:
if(connect == null) return;
ResultSet odpoved = null;
PreparedStatement statement = connect.prepareStatement("SELECT * FROM tabulkaE01 WHERE firstName=(?) OR firstName=(?) ");
statement.setString(1,"Jmeno4");
statement.setString(2,"Jmeno6");
odpoved = statement.executeQuery();

CallableStatement

Objekt dopytu CallableStatement umožnuje volať defaultný, alebo nami vytvorené procedúry a funkcie, ktoré sú súčasťou databázy. CallableStatement môže vrátiť nielen primitívne dátové typy, ale aj objekty, alebo viac objektov (pole, kolekcia), či ResultSet.

CallableStatement môžeme rozdeliť na:

  • OUT s návratovým typom
  • IN / OUT so vstupným parametrom a návratovým typom

Ukážeme si oba prípady.

OUT

Najprv si vyskúšame CallableStatement s návratovým typom. Zavoláme defaultný integrovanú procedúru, ktorá nám vráti názov databázy:
if(connect == null) return;
CallableStatement statement = connect.prepareCall("?  = CALL SYSCS_UTIL.SYSCS_GET_DATABASE_NAME()");
statement.registerOutParameter(1, Types.VARCHAR);
statement.executeUpdate();
String hodnota = statement.getString(1);
System.out.println("Informácie SYSCS_UTIL.SYSCS_GET_DATABASE_NAME : "+hodnota);

IN / OUT

Na CallableStatement so vstupným parametrom a návratovým typom si ukážeme dva príklady.

Príklad 1

V prvom príklade odovzdáme vstupný parameter s hodnotou DataDictionaryVersion defaultný integrovanej procedúre, ktorá nám vráti hodnotu databázové vlastnosti DataDictionaryVersion:
if(connect == null) return;
CallableStatement statement = connect.prepareCall("?  = CALL SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY(?)");
statement.registerOutParameter(1, Types.VARCHAR);
statement.setString(2,"DataDictionaryVersion");
statement.executeUpdate();
String hodnota = statement.getString(1);
System.out.println("Informace SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY - DataDictionaryVersion : "+hodnota);

Príklad 2

V druhom príklade odovzdáme tri vstupné parametre užívateľské procedúre, ktorá nám vráti hodnoty v objekte ResultSet:
if(connect == null) return;
CallableStatement statement = connect.prepareCall("{call vypis2radku(?,?,?)}");
    statement.setString(1,"tabulkaE01");
    statement.setString(2,"Jmeno6");
    statement.setInt(3,222222);
    ResultSet odpoved = statement.executeQuery();
    while(odpoved.next()) {
    System.out.print("Id : "+odpoved.getInt(1)+"\t");
            System.out.print("Jmeno : "+odpoved.getString(2)+"\t");
            System.out.print("Primeni : "+odpoved.getString(3)+"\t");
            System.out.print("Informace : "+odpoved.getString(4)+"\t");
            System.out.println("Cislo : "+odpoved.getInt(5));
}

V budúcej lekcii, Derby DB - Použitie objektov dotazov Statement , vytvoríme projekt, v ktorom využijeme objekty otázok Statement, PreparedStatement a CallableStatement.


 

Predchádzajúci článok
Derby DB - Metadáta databázy a tabuľky
Všetky články v sekcii
DerbyDb
Preskočiť článok
(neodporúčame)
Derby DB - Použitie objektov dotazov Statement
Článok pre vás napísal Robert Michalovič
Avatar
Užívateľské hodnotenie:
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