Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

8. diel - Programovanie databázového Wrapper v Jave - Dokončenie

V minulom dieli seriálu tutoriálov o databázach v Jave sme rozpísali databázový wrapper v Jave. V tomto poslednom diele si dorobíme metódu select, vďaka ktorej si budeme načítavať dáta z databázy. Potom všetky doterajšie metódy otestujeme a nakoniec si ukážeme, ako by sme mohli náš wrapper rozšíriť.

Dokončenie Wrapper - metóda select

Táto metóda bude pracovať inak ako metódy save, delete a update. Nebude využívať metódu query, pretože v tej voláme metódu executeUpdate, ktorá vracia počet ovplyvnených riadkov. V metóde naopak budeme vracať ResultSet, ktorý vytvoríme za pomoci metódy executeQuery.

public class Database {
    //atribut třídy
    //metody tříd
    /**
     * Vrací údaje z databázové tabulky
     * @param table
     * @param columns
     * @param params
     * @return
     * @throws SQLException
     */
    public ResultSet select(String table, Object[] columns, Object[] params) throws SQLException{
        return this.select(table, columns, "", params);
    }

    /**
     * Vrací údaje z databázové tabulky
     * @param table
     * @param columns
     * @param requirement
     * @param params
     * @return
     * @throws SQLException
     */
    public ResultSet select(String table, Object[] columns, String requirement, Object[] params) throws SQLException{
        query = new Query();
        query.select(columns)
             .from(table)
             .where(requirement);

        PreparedStatement ps = connection.prepareStatement(query.getQuery());
        if(params != null){
            int index = 1;
            for(Object param : params){
            ps.setObject(index, param);
            index++;
         }
        }

        ResultSet rs = ps.executeQuery();
        return rs;
    }
}

Metóda select je posledná metóda, ktorú v našom wrapper implementujeme. Nájdeme tu jedno preťaženia. Môžeme volať metódu select s podmienkou a alebo bez nej.

Testovanie Wrapper

Tak triedu Database máme hotovú a teraz sa presunieme do triedy Wrapper, ktorú nám vygeneroval NetBeans. Všetky vykonané zmeny môžete pozorovať vo svojom grafickom vývojovom databázovom prostredí. Najprv otestujeme pripojenie:

package wrapper;


import DB.Database;
import java.sql.SQLException;


public class Wrapper {


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            Database database = new Database("osoby", "root", "");
        } catch (SQLException ex) {
            System.out.println("error - "+ex.getMessage());
        }
    }

}

Kód otestujte. Všetko by malo byť v poriadku. Nemala by sa vám zobraziť žiadna chybová hláška. Odteraz budeme pripisovať kód len do metódy main. Budem teda písať iba obsah metódy main. Zvyšok triedy nebudem v ďalších častiach vypisovať.

Zápis

try {
    Database database = new Database("osoby", "root", "");
            Object[] firstParams = {22, "Galí", 43, "PHP"};
            int uspech1 = database.insert("programatori", firstParams);
            System.out.println("Uložení uživatele = "+uspech1);
} catch (SQLException ex) {
         System.out.println("error - "+ex.getMessage());
}

Mali by ste dostať výsledok:

Uložení uživatele = 1
BUILD SUCCESSFUL (total time: 1 second)*

Postup (Metódy insert a values v triede Query)

V prvom kroku po skončení cyklu for, dostaneme nasledujúce podobu SQL dotazu:

INSERT INTO programatori VALUES(?,?,?,?,

Vďaka metóde deleteCharAt, ktoré posielame ako parameter index posledného výskytu čiarky v poli STRING, ktorý získame pomocou metódy sb.lastIndexOf, vymažeme posledný čiarku. A nakoniec pridáme koniec zátvorky a bodkočiarka. Potom bude dotaz kompletný a bude vyzerať nasledovne:

INSERT INTO programatori VALUES(?,?,?,?);

Dotaz sa následne spustí metódou query.

Vymazanie užívateľa

Database database = new Database("osoby", "root", "");

Object[] params2 = {"Galí"};
        int uspech2 = database.delete("programatori", "jmeno = ?", params2);
        System.out.println("Smazání uživatele Gali = "+uspech2);

výstup:

Smazání uživatele Gali = 1
BUILD SUCCESSFUL (total time: 1 second)

Prepísanie užívateľa

Database database = new Database("osoby", "root", "");

String[] columns = {"jmeno","vek","jazyk"};
            Object[] params = {"Galileo", 18, "Java", 6};
            int uspech4 = database.update("programatori", columns, "id = ?", params);
            System.out.println("Přepsání uživate = "+uspech4);

výstup:

Přepsání uživate = 1
BUILD SUCCESSFUL (total time: 1 second)

postup:

Metóda pred cyklom for vygereruje nasledujúce sql dotaz:

UPDATE osoby SET

Po cykle for bude vyzerať otázka takto:

UPDATE osoby SET jmeno = ? ,vek = ? ,

A po odstránení poslednej čiarky a po pridaní podmienky bude dotaz v konečnej podobe:

UPDATE osoby SET jmeno = ? ,vek = ? where id = ?

Výpis

String[] columns3 = {"jmeno","jazyk"};
            Object[] params3 = {"Java"};
            ResultSet rs = database.select("programatori", columns3, "jazyk = ?", params3);
}

Táto metóda pracuje trochu inak, než ostatné metódy. Jej návratová hodnota ResultSet ak vypísanie užívateľov použijeme cyklus. Takto by vyzeralo vypísanie:

while(rs.next()){
      System.out.println(rs.getString("jmeno")+" - "+rs.getString("jazyk"));
}

výstup:

James - java
Danna - java
Galileo - Java
Amy - java
BUILD SUCCESSFUL (total time: 1 second)

Vylepšenia Wrapper

Takto vyzerajúci knižnica by nám v aplikáciách na mnoho vecí stačila. Poďme si ale ukázať ako našej triedu ešte vylepšiť

Metóda count - počet riadkov v databázovej tabuľke:

public class Database {
    //atribut třídy
    //metody tříd

    /**
     *
     * @param table
     * @return
     * @throws SQLException
     */
    public int count(String table) throws SQLException{
        PreparedStatement ps = connection.prepareStatement("SELECT COUNT(*) FROM "+table);
        ResultSet result = ps.executeQuery();
        result.next();
        return result.getInt(1);
    }

}

Tabuľku tam musíme dosadiť natvrdo "SELECT COUNT (*) FROM" + table. Meno tabuľky totiž nemôžeme dať ako parameter metóde setString.

Test celej triedy Database

public static void main(String[] args) {
    try {
            Database database = new Database("osoby", "root", "");
            Object[] firstParams = {22, "Galí", 43, "PHP"};
            int uspech1 = database.insert("programatori", firstParams);
            System.out.println("Uložení uživatele = "+uspech1);

            Object[] params2 = {"Galí"};
            int uspech2 = database.delete("programatori", "jmeno = ?", params2);
            System.out.println("Smazání uživatele Gali = "+uspech2);

            String[] columns = {"jmeno","vek","jazyk"};
            Object[] params = {"Galileo", 18, "Java", 6};
            int uspech4 = database.update("programatori", columns, "id = ?", params);
            System.out.println("Přepsání uživate = "+uspech4);

            String[] columns3 = {"jmeno","jazyk"};
            Object[] params3 = {"Java"};
            ResultSet rs = database.select("programatori", columns3, "jazyk = ?", params3);

            while(rs.next()){
                System.out.println(rs.getString("jmeno")+" - "+rs.getString("jazyk"));
            }
        System.out.println(database.count("programatori"));
    } catch (SQLException ex) {
        System.out.println("error - "+ex.getMessage());
    }
}

Tak a to je k našej aplikácii všetko. Wrapper môžete otestovať na vašich aplikáciách a potom mi určite napíšte spätnú väzbu. Napríklad čo by ste do Wrapper doplnili alebo čo by ste urobili inak. Hotovú knižnicu si môžete stiahnuť dole pod článkom aj so zdrojovými kódmi.

V nasledujúcom kvíze, Kvíz - Práca s databázou a wrapper v Java JDBC, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

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

 

Predchádzajúci článok
Programovanie databázového Wrapper v Jave - Trieda Database
Všetky články v sekcii
Databázy v Jave - JDBC
Preskočiť článok
(neodporúčame)
Kvíz - Práca s databázou a wrapper v Java JDBC
Článok pre vás napísal Milan Gallas
Avatar
Užívateľské hodnotenie:
1 hlasov
Autor se věnuje programování, hardwaru a počítačovým sítím.
Aktivity