NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.

Lekce 5 - Programování databázového Wrapperu v Javě - Příprava

V předchozí lekci, Databáze v Java JDBC - INSERT, UPDATE, DELETE a COUNT, jsme se naučili základní databázové operace INSERT, UPDATE a DELETE.

Dosud jsme při práci s databází psali kód stále dokola a vznikaly nám tak duplicitní části kódu. V dnešním díle si proto vytvoříme náš vlastní databázový wrapper, který nám v aplikacích ušetří práci a my se budeme moci soustředit na logiku aplikace a nebudeme se muset tolik zabývat jazykem SQL.

V tomto tutoriálu ještě nebudeme vytvářet samotný wrapper, ale připravíme si testovací data, vytvoříme databázi, tabulky a nakonfigurujeme náš projekt. Můžete tedy brát tento úvodní díl jako přípravu do dalších dílů, kde se již budeme tvorbou wrapperu plně zabývat.

Založení a příprava projektu

Vytvoříme si v IntelliJ nový projekt z kategorie Java - Maven s názvem Wrapper a balíčkem cz.itnetwork. IDE nám vytvoří základní strukturu projektu s Main třídou v balíčku cz.itnetwork. Hlavní třída bude později obsahovat databázový wrapper, proto ji přejmenujeme na Wrapper.java. Do projektu postupně doplníme třídy Database a Query, které umístíme do samostatného balíčku s názvem DB. Klikneme pravým tlačítkem myši na složku java/ a balíček si do projektu přidáme a vytvoříme v něm obě uvedené třídy.

Nakonec nesmíme zapomenout k projektu přes soubor pom.xml přidat ovladač MySQL JDBC Driver. Postup byl popsán v lekci Databáze v Java JDBC - Výpis dat a parametry.

Vizuální prostředí databáze

Pro lepší pochopení a snadnější práci s databází MySQL můžeme používat některé z grafických prostředí. Na výběr máme mnoho programů, například phpMyAdmin nebo DatAdmin, můžeme též použít IntelliJ plugin DB Browser, který jsme si popsali na začátku kurzu.

Návrh databáze

Abychom měli náš wrapper na čem vyzkoušet, tak si vytvoříme databázi osoby a v ní jednu jednoduchou tabulku programatori, která bude mít sloupce id, jmeno, vek a jazyk. Buďto využijte grafického prostředí a jednoduše si databázi a tabulku naklikejte nebo použijte následující 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;

Testovací data

Testovací data jsou důležitou součástí každého projektu. Jen řádně otestovaná aplikace (nebo třída, knihovna) je správně fungující aplikace. Proto do tabulky programatori vložíme 14 testovacích subjektů:

INSERT INTO  `osoby`.`programatori` (
    `jmeno`,
    `vek`,
    `jazyk`
)

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ázka

Nyní si ukážeme, jak bychom řešili 5 jednoduchých úloh bez wrapperu a jak to bude vypadat s ním.

Běžné řešení

Vypsání tabulky:

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(vysledky.getString("jmeno") + " - " + vysledky.getString("jazyk"));
    }

} catch (SQLException ex) {
    System.out.println("Chyba při komunikaci s databází: " + ex.getMessage());
}

Poté bychom někde v aplikaci potřebovali vymazat jednoho programátora z databázové tabulky :

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("Počet smazaných řádků: " + radku);

} catch (SQLException ex) {
    System.out.println("Chyba při komunikaci s databází: " + ex.getMessage());
}

Takovéto řešení (pouze 2 úloh) je hodně dlouhé a navíc, pokud s databází pracuje více tříd, bude kód duplicitní (viz výše).

Řešení s wrapperem

Následující kód provádí s databází hned 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 vysledky = database.select("SELECT * FROM `osoby`", null);

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

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

Kód je mnohem kratší a přehlednější něž ten původní. Zatím vám to asi nic neřekne, ale nebojte, všech 5 úkolů si při tvorbě wrapperu popíšeme a vysvětlíme.

V příští lekci, Databázový wrapper v Javě - Tvorba třídy Query, se konečně naplno pustíme do programování vlastního wrapperu.


 

Předchozí článek
Databáze v Java JDBC - INSERT, UPDATE, DELETE a COUNT
Všechny články v sekci
Databáze v Javě - JDBC
Přeskočit článek
(nedoporučujeme)
Databázový wrapper v Javě - Tvorba třídy Query
Článek pro vás napsal Milan Gallas
Avatar
Uživatelské hodnocení:
62 hlasů
Autor se věnuje programování, hardwaru a počítačovým sítím.
Aktivity