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

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 INSTERT, 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 úvodním dí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.

Vizuální prostředí databáze

Pro lepší pochopení a snadnější práci s databází MySQL můžete používat některé z grafických prostředí. Na výběr máme mnoho programů. Já vám mohu doporučit například phpMyAdmin, nebo DatAdmin. Určitě existuje mnoho dalších vývojových prostředí. Jestli znáte nějaké jiné grafické prostředí a vyhovuje vám více, než tyto nástroje, klidně jej používejte.

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

Ta 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` (
`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á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:

// 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í");
}

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(radku);
} catch (SQLException ex) {
        System.out.println("Chyba při komunikaci s databází");
}

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

Založení a příprava projektu

Vytvoříme si v NetBeans nový projekt z kategorie Java - Java Application s názvem Wrapper. Zatím máme v aplikaci jen jeden balíček s názvem Wrapper. Vytvoříme si proto nový balíček DB a v tomto balíčku si vytvoříme třídu Database.

Postup

Klikneme na složku Source Packages pravým tlačítkem myši a zvolíme new -> Java Package. Package nazveme DB.

Nový Java balíček - Databáze v Javě - JDBC

Poté na tento balíček klikneme pravým tlačítkem myši a zvolíme new -> Java Class. Třídě dáme jméno Database.

Nakonec si nesmíme zapomenout k projektu přidat ovladač MySQL JDBC Driver. Postup byl popsán v jednom z minulých tutoriálů. Můžete jej najít zde

V dnešním dílu je to vše a já se na vás budu těšit příště.

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í:
48 hlasů
Autor se věnuje programování, hardwaru a počítačovým sítím.
Aktivity