Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

5. diel - Programovanie databázového Wrappera v Jave - Príprava

V predchádzajúcej lekcii, Databázy v Java JDBC - INSERT, UPDATE, DELETE a COUNT, sme sa naučili základné databázové operácie INSERT, UPDATE a DELETE.

Doposiaľ sme pri práci s databázou písali kód stále dookola a vznikali nám tak duplicitné časti kódu. V dnešnom diele si preto vytvoríme náš vlastný databázový wrapper, ktorý nám v aplikáciách ušetrí prácu a my sa budeme môcť sústrediť na logiku aplikácie a nebudeme sa tak musieť zaoberať jazykom SQL.

V tomto tutoriále ešte nebudeme vytvárať samotný wrapper, ale pripravíme si testovacie dáta, vytvoríme databázu, tabuľky a nakonfigurujeme náš projekt. Môžete teda brať tento úvodný diel ako prípravu do ďalších dielov, kde sa už budeme tvorbou wrappera plne zaoberať.

Založenie a príprava projektu

Vytvoríme si v IntelliJ nový projekt z kategórie Java - Maven s názvom Wrapper a balíčkom com.ictdemy. IDE nám vytvorí základnú štruktúru projektu s Main triedou v balíčku com.ictdemy. Hlavná trieda bude neskôr obsahovať databázový wrapper, preto ju premenujeme na Wrapper.java. Do projektu postupne doplníme triedy Database a Query, ktoré umiestnime do samostatného balíčka s názvom DB. Klikneme pravým tlačidlom myši na priečinok java/ a balíček si do projektu pridáme a vytvoríme v ňom obe uvedené triedy.

Nakoniec nesmieme zabudnúť k projektu cez súbor pom.xml pridať ovládač MySQL JDBC Driver. Postup bol popísaný v lekcii Databáza v Java JDBC - Výpis dát a parametre.

Vizuálne prostredie databázy

Pre lepšie pochopenie a jednoduchšiu prácu s databázou MySQL môžeme používať niektoré z grafických prostredí. Na výber máme mnoho programov, napríklad phpMyAdmin alebo DatAdmin, môžeme tiež použiť IntelliJ plugin DB Browser, ktorý sme si popísali na začiatku kurzu.

Návrh databázy

Aby sme mali náš wrapper na čom vyskúšať, vytvoríme si databázu persons a v nej jednu jednoduchú tabuľku programmers, ktorá bude mať stĺpce id, name, age a language. Buď využite grafické prostredie a jednoducho si databázu a tabuľku naklikajte alebo použite nasledujúci SQL dotaz:

CREATE DATABASE `persons`;

CREATE TABLE `persons`.`programmers` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(30) NOT NULL,
    `age` INT NOT NULL,
    `language` VARCHAR(20) NOT NULL
) ENGINE = INNODB;

Testovacie dáta

Testovacie dáta sú dôležitou súčasťou každého projektu. Len riadne otestovaná aplikácia (alebo trieda, knižnica) je správne fungujúca aplikácia. Preto do tabuľky programmers vložíme 14 testovacích subjektov:

INSERT INTO  `persons`.`programmers` (
    `name`,
    `age`,
    `language`
)
VALUES
('James', 23, 'Java'),
('Danna', 32, 'Java'),
('Kaitlin', 41, 'Python'),
('Daniel', 18, 'PHP'),
('Jack', 51, 'Delphi'),
('Kaitlin', 26, 'C#'),
('Kate', 52, 'Modula-3'),
('Amy', 38, 'Java'),
('Josh', 66, 'PHP'),
('Joe', 39, 'Python'),
('Matthew', 37, 'F#'),
('Gabriel', 21, 'PHP'),
('Lara', 20, 'C++'),
('Samantha', 16, 'VB.NET');

Ukážka

Teraz si ukážeme, ako by sme riešili 5 jednoduchých úloh bez wrappera a ako to bude vyzerať s ním.

Bežné riešenie

Vypísanie tabuľky:

try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/persons?user=root&password=");
    PreparedStatement statement = connection.prepareStatement("SELECT * FROM programmers");
    ResultSet results = statement.executeQuery()) {

    while (results.next()) {
        System.out.println(results.getString("name") + " - " + results.getString("language"));
    }

} catch (SQLException ex) {
    System.out.println("Error while communicating with the database");
}

Potom by sme niekde v aplikácii potrebovali vymazať jedného programátora z databázovej tabuľky:

try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/dictionary_db?user=root&password=");
    PreparedStatement statement = connection.prepareStatement("DELETE FROM programmers WHERE name = ?")) {

    statement.setString(1, "Jack");
    int rows = statement.executeUpdate();
    System.out.println("Number of rows deleted: " + rows);

} catch (SQLException ex) {
    System.out.println("Error while communicating with the database");
}

Takéto riešenie (len 2 úloh) je veľmi dlhé a navyše, ak s databázou pracuje viacero tried, kód bude duplicitný (viď vyššie).

Riešenie s wrapperom

Nasledujúci kód vykonáva s databázou hneď 5 úloh:

try {
     System.out.println("Welcome");

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

     int success1 = database.delete("persons", "name = ?", "gali");
     int success2 = database.delete("persons", "id = ?", 12);
     int success3 = database.save("persons", null, "Galí", 43, "PHP");

     String[] columns = {"name", "age"};
     int success = database.update("persons", columns, "where id = ?", "Galileo", 40, 30);

     System.out.println(success);
     System.out.println(success1);
     System.out.println(success2);
     System.out.println(success3);

     ResultSet results = database.select("SELECT * FROM `persons`", null);

     while (results.next()) {
         System.out.println(results.getString("name") + " - " + results.getString("language"));
     }

} catch (SQLException ex) {
     System.out.println("Error - " + ex.getMessage());
}

Kód je oveľa kratší a prehľadnejší ako ten pôvodný. Zatiaľ vám to asi nič nepovie, ale nebojte sa, všetkých 5 úloh si pri tvorbe wrappera popíšeme a vysvetlíme.

V budúcej lekcii, Databázový wrapper v Jave - Tvorba triedy Query, sa konečne naplno pustíme do programovania vlastného wrappera.


 

Predchádzajúci článok
Databázy v Java JDBC - INSERT, UPDATE, DELETE a COUNT
Všetky články v sekcii
Databázy v Jave - JDBC
Preskočiť článok
(neodporúčame)
Databázový wrapper v Jave - Tvorba triedy Query
Článok pre vás napísal Milan Gallas
Avatar
Užívateľské hodnotenie:
2 hlasov
Autor se věnuje programování, hardwaru a počítačovým sítím.
Aktivity