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

7. diel - Programovanie databázového Wrapper v Jave - Trieda Database

V minulom dieli seriálu tutoriálov o databázach v Jave sme započali tvorbu databázového Wrapper, ktorý nám zjednoduší prácu s databázou a vytvorili sme triedu Query. Dnes budeme tvoriť triedu Database, ktorá je síce okomentované, ale aj tak vám k určitým častiam poviem pár slov. Ešte predtým si ale otestujeme triedu Query.

Testovanie triedy Query

V triede Wrapper si do metódy main vložte nasledujúci kód, ktorým otestujeme jednotlivé otázky na triede Query.

Query query = new Query();

query.delete("programatori").where("jmeno = ?");
System.out.println(query.getQuery());
//Výstup: DELETE FROM programatori WHERE jmeno = ?

String[] columns3 = {"jmeno","jazyk"};
query.update("programatori").set(columns3).where("where id = ?");
System.out.println(query.getQuery());
//Výstup: UPDATE programatori SET jmeno = ?,jazyk = ? WHERE where id = ?

query.select(null).from("programatori").where("jazyk = ?");
System.out.println(query.getQuery());
//Výstup: SELECT * FROM programatori WHERE jazyk = ?

Object[] firstParams = {null, "Galí", 43, "PHP"};
query.insert("programatori").values(firstParams);
System.out.println(query.getQuery());
//Výstup: INSERT INTO programatori VALUES(?,?,?,?);

Je nutné aby ste si triedu Query importovali!

Teraz už prejdime k triede Database, ktorá zastrešuje celý wrapper.

Konštruktor - pripojenie k databáze

V konstruktoru sa pripojíme k databáz a toto spojenie si uložíme.

package DB;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;

/**
*
* @author Milan Gallas
*/

public class Database {

     //připojení k databázi
     protected Connection connection;

     //instance třídy query
     protected Query query;

     /**
     * Konstruktor třídy Database
     * @param db
     * @param userName
     * @param password
     * @throws SQLException
     */
     public Database(String db, String userName, String password) throws SQLException{

          connection = DriverManager.getConnection("jdbc:mysql://localhost/"+db, userName, password);

     }

}

Pozn .: Ak by sme wrapper používali vo webovej aplikácii miesto v desktopové, nebol by tento prístup vhodný kvôli veľkému počtu aktívnych spojení s databázou. V tomto prípade by sme sa mali pripojiť v každej metóde znovu a pomocou bloku TWR, ako to poznáte z predchádzajúcich tutoriálov.

Všeobecná metóda Query

Táto metóda bude privátne a bude to pomocná metóda pre metódy delete, save a update, ktoré si vytvoríme v ďalších častiach.

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

     /**
     *
     * @param query
     * @param params
     * @return
     * @throws SQLException
     */
    private int query(String query, Object[] params) throws SQLException{
         PreparedStatement ps = connection.prepareStatement(query);
         if (params != null){
           int index = 1;
           for(Object param : params){
             ps.setObject(index, param);
            index++;
           }
         }
         return ps.executeUpdate();
    }
 }

Metóda prijíma ako prvý parameter SQL dotaz a ďalej môže prijať akýkoľvek počet parametrov rôzneho typu.

Ďalej stojí za povšimnutie metóda setObject () triedy PreparedState­ment. Vďaka tejto metóde môžeme uložiť hodnoty bez toho aby sme dopredu vedeli aký majú typ údajov. Táto metóda je pre nás záchrana a veľmi nám uľahčí prácu.

Metóda vracia počet ovplyvnených riadkov. Výnimka, ktorá môže pri dotazu vzniknúť, je automaticky propagovaná vďaka použitiu kľúčového slova throws v hlavičke metódy. Dátový typ výnimky je v tomto prípade SQLEXCEPTION.

Vymazanie záznamov - metóda delete

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

   /**
     * Vymaže údaje z databázové tabulky
     * @param table
     * @param requirement
     * @param param
     * @return
     * @throws SQLException
     */
    public int delete(String table, String requirement, Object[] param) throws SQLException{
        query = new Query();
        query.delete(table)
             .where(requirement);
        return query(query.getQuery(), param);
    }
}

Metóde delete môžeme odovzdať podmienku a parametre a vymažú sa iba tie záznamy, ktoré splnia nami stanovené kritériá.

Výnimky sa v tejto metóde taktiež vyvolávajú automaticky a ich ošetrenie prenechávame až na triede, z ktorej metódu budeme volať.

Metóda ďalej vracia počet ovplyvnených riadkov. Pomocou tejto hodnoty potom zistíme, či sa dotaz vykonal správne. Túto návratovú hodnotu vracia tiež metódy save a update! Je dôležité nezabudnúť, že výsledný SQL dotaz nám vracia metóda getQuery. Častá chyby je, že sa metóde query odovzdá iba inštancie triedy Query. Viď príklad:

//Tento kód nebude fungovat
return query(query, param);

Zápis údajov - metóda insert

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

    /**
     * Uloží do databázové tabulky 1 subjekt
     * @param table
     * @param params
     * @return
     * @throws java.sql.SQLException
     */
    public int insert(String table, Object[] params) throws SQLException{
        query = new Query();
        query.insert(table)
             .values(params);
        return query(query.getQuery(), params);
    }
}

Metóda insert triedy Database má 2 parametre. Názov tabuľky a údaje ktoré sa majú do tabuľky zapísať. Metóda je jednoduchá a nie je k nej veľmi čo dodať.

Aktualizácia údajov - metóda update

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

   /**
     * Aktualizuje data uložená v databázové tabulce
     * @param table
     * @param columns
     * @param requirement
     * @param params
     * @return
     * @throws SQLException
     */
    public int update(String table, String[] columns, String requirement, Object[] params) throws SQLException{
        query = new Query();

        query.update(table)
             .set(columns)
             .where(requirement);

        return query(query.getQuery(), params);
    }
 }

Prvé tri parametre tejto metódy sú: názov databázovej tabuľky, pole názvu stĺpcov a podmienka. Ďalej môže mať metóda ešte ďalšie parametre typu Object, ktoré značí údaje, ktoré sa do tabuľky zapíšu namiesto tých starých.

Vo všetkých metódach v triede Database môžete vidieť výhody plynulého rozhranie. Kód je veľmi jednoduchý, čitateľný a dá sa ľahko pochopiť.

Tak a zostala nám na dorobenie ešte metóda select. Túto metódu si vytvoríme v ďalšom diele a tam tiež budeme s našim Wrapper pracovať a budeme ho testovať.


 

Predchádzajúci článok
Databázový wrapper v Jave - Tvorba triedy Query
Všetky články v sekcii
Databázy v Jave - JDBC
Preskočiť článok
(neodporúčame)
Programovanie databázového Wrapper v Jave - Dokončenie
Č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