5. diel - Programovanie databázového Wrapper v Jave - Príprava
Doteraz sme pri práci s databázou písali kód stále dokola 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 musieť toľko zaoberať jazykom SQL. V tomto úvodnom dieli 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 wrapper plne zaoberať.
Vizuálne prostredie databázy
Pre lepšie pochopenie a jednoduchšiu prácu s databázou MySQL môžete používať niektoré z grafických prostredí. Na výber máme mnoho programov. Ja vám môžem odporučiť napríklad phpMyAdmin, alebo DatAdmin. Určite existuje mnoho ďalších vývojových prostredí. Ak poznáte nejaké iné grafické prostredie a vyhovuje vám viac, než tieto nástroje, pokojne ho používajte.
Návrh databázy
Aby sme mali náš wrapper na čom vyskúšať, tak si vytvoríme databázu osoby a v nej jednu jednoduchú tabuľku programátorovi, ktorá bude mať stĺpce id, meno, vek a jazyk. Buďto využite grafického prostredia a jednoducho si databázu a tabuľku naklikajte, alebo použite nasledujúce sql dotaz:
CREATE DATABASE osoby; CREATE TABLE `osoby`.`programatori` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `jmeno` VARCHAR( 30 ) NOT NULL , `vek` INT NOT NULL , `jazyk` VARCHAR( 20 ) NOT NULL ) ENGINE = INNODB;
Testovacie dáta
Tá sú dôležitou súčasťou každého projektu. Len riadne otestovaná aplikácie (alebo trieda, knižnica) je správne fungujúci aplikácie. Preto do tabuľky Programátor vložíme 14 testovacích subjektov:
INSERT INTO `osoby`.`programatori` ( `id` , `jmeno` , `vek` , `jazyk` ) VALUES ( 'null', 'James', '23', 'java' ), ( 'null', 'Danna', '32', 'java' ), ( 'null', 'Kaitlin', '41', 'Pythor' ), ( 'null', 'Daniel', '18', 'php' ), ( 'null', 'Jack', '51', 'Delphi' ), ( 'null', 'Kaitlin', '26', 'c#' ), ( 'null', 'Kate', '52', 'Modula-3' ), ( 'null', 'Amy', '38', 'java' ), ( 'null', 'Josh', '66', 'php' ), ( 'null', 'Joe', '39', 'Pythor' ), ( 'null', 'Matthew', '37', 'f#' ), ( 'null', 'Gabriel', '21', 'php' ), ( 'null', 'Lara', '20', 'c++' ), ( 'null', 'Samantha', '16', 'VB.net' );
Ukážka
Teraz si ukážeme ako by sme riešili 5 jednoduchých úloh bez Wrapper a ako to bude vyzerať s ním.
Bežné riešenie
Vypísanie tabuľky:
// 1) try (Connection spojeni = DriverManager.getConnection("jdbc:mysql://localhost/osoby?user=root&password="); PreparedStatement dotaz = spojeni.prepareStatement("SELECT * FROM programatori"); ResultSet vysledky = dotaz.executeQuery();) { while (vysledky.next()) { System.out.println(vysledek.getString("jmeno")+" - "+vysledek.getString("jazyk")); } } catch (SQLException ex) { System.out.println("Chyba při komunikaci s databází"); }
Potom by sme niekde v aplikácii potrebovali vymazať jedného programátora z databázovej tabuľky:
try (Connection spojeni = DriverManager.getConnection("jdbc:mysql://localhost/slovnicek_db?user=root&password="); PreparedStatement dotaz = spojeni.prepareStatement("DELETE FROM programatori WHERE jmeno = ?");) { dotaz.setString(1, "Jack"); int radku = dotaz.executeUpdate(); System.out.println(radku); } catch (SQLException ex) { System.out.println("Chyba při komunikaci s databází"); }
Takéto riešenia (iba 2 úloh) je veľa dlhé a navyše, ak s databázou pracuje viac tried, bude kód duplicitné (pozri vyššie).
Riešenie s Wrapper
Nasledujúci kód vykonáva s databázou hneď 5 úloh:
try { System.out.println("Vítejte"); Database database = new Database("osoby", "root", ""); int uspech1 = database.delete("osoby", "jmeno = ?", "gali"); int uspech2 = database.delete("osoby", "id = ?", 12); int uspech3 = database.save("osoby", null, "Galí", 43, "PHP"); String[] columns = {"jmeno","vek"}; int uspech = database.update("osoby", columns, "where id = ?", "Galileo", 40, 30); System.out.println(uspech); System.out.println(uspech1); System.out.println(uspech2); System.out.println(uspech3); ResultSet vysledek = database.select("SELECT * FROM `osoby`", null); while(vysledek.next()) { System.out.println(vysledek.getString("jmeno")+" - "+vysledek.getString("jazyk")); } } catch (SQLException ex) { System.out.println("chyba - "+ex.getMessage()); }
Kód je oveľa kratšia a prehľadnejšie ktoré ten pôvodný. Zatiaľ vám to asi nič nepovie, ale nebojte, všetkých 5 úloh si pri tvorbe Wrapper popíšeme a vysvetlíme.
Založenie a príprava projektu
Vytvoríme si v NetBeans nový projekt z kategórie Java - Java Application s názvom Wrapper. Zatiaľ máme v aplikácii len jeden balíček s názvom Wrapper. Vytvoríme si preto nový balíček DB a v tomto balíčku si vytvoríme triedu Database.
Postup
Klikneme na priečinok Source Packages pravým tlačidlom myši a zvolíme new -> Java Package. Package nazveme DB.
Potom na tento balík klikneme pravým tlačidlom myši a zvolíme new -> Java Class. Triede dáme meno Database.
Nakoniec si nesmieme zabudnúť k projektu pridať ovládač MySQL JDBC Driver. Postup bol opísaný v jednom z minulých tutoriálov. Môžete ho nájsť tu
V dnešnom dieli je to všetko a ja sa na vás budem tešiť nabudúce, kedy sa konečne naplno pustíme do programovania vlastného wrapper.