Lekce 2 - Návrh MySQL databáze v IntelliJ IDE
V minulém dílu, Úvod do databází v Javě, jsme si vysvětlili proč je dobrý nápad pro práci s daty používat zrovna databázi. Říkali jsme si také, že v Javě jsou pro práci s databází 2 hlavní přístupy: JDBC a JPA.
V dnešním tutoriálu si vytvoříme novou databázi, na které se v dalších dílech budeme učit. Používat budeme databázi MySQL. Pokud chcete v Javě pracovat s jinou databází, můžete si klidně přečíst tento seriál, jelikož SQL dotazy u různých databází jsou velmi podobné a základní dotazy dokonce úplně stejné.
Instalace databáze
Jako první samozřejmě musíme mít databázi nainstalovanou. Pokud jsme s MySQL ještě nikdy nepracovali, měli bychom si nejprve přečíst seriál MySQL, kde se dozvíme vše potřebné. MySQL databázi můžeme nainstalovat buď samostatně z webu http://dev.mysql.com/downloads/ nebo např. v balíku XAMPP. My zvolíme druhou možnost a budeme postupovat podle pokynů z lekce MySQL krok za krokem - Úvod do MySQL a příprava prostředí.
Instalace pluginu Database navigator
Database navigator je plugin pro IntelliJ, který umožňuje prohlížet databáze přímo z IDE IntelliJ IDEA. Umožňuje také spouštět SQL skripty, prohlížet a upravovat jednotlivé databáze.
Pro instalaci klikneme v IntelliJ na záložku Plugins v hlavním
menu a do vyhledávače napíšeme Database navigator
:
Klikneme na tlačítko Install a poté na tlačítko Restart IDE, které se nám objeví, jakmile je plugin nainstalován.
Práce s databází v IntelliJ IDEA
Veškerou administraci MySQL databáze budeme dělat přes IDE. Předpokládáme, že databázi máme nainstalovanou a spuštěnou.
Připojení k MySQL databázi
V IntelliJ si založíme nový Java projekt s názvem Slovnicek
.
V levém panelu klikneme na novou ikonku DB Browser, poté na
tlačítko + a z robaleného seznamu vybereme MySQL:
Tím se nám v IDE otevře nové okno Connection, ve kterém pouze
změníme způsob autentifikace na možnost User a jako jméno
uživatele zadáme root
:
Port pro připojení je nastavený na hodnotu 3306
a u
položky Host je vyplněno localhost
, což znamená, že
nám databáze běží na tom samém počítači, jako aplikace. Připojení
můžeme otestovat tlačítkem Test Connection, abychom se ujistili,
že jsme zadali správné údaje:
Nyní se k databázi připojíme tlačítkem Apply. Po úspěšném připojení se nám v záložce Schemas zobrazí všechny databáze a tabulky uložené na MySQL serveru.
Vytvoření databáze
Pro náš projekt si ke stávajícím databázím vytvoříme novou
databázi, kterou nazveme slovnicek_db
. Mohli bychom to udělat
pomocí nástroje phpMyAdmin, jak jsme zvyklí z kurzu MySQL. My si však
databázi vytvoříme z IntelliJ pomocí našeho pluginu Database navigator.
Rozbalíme záložku Console a klikneme na Connection, po pravé straně se nám tím otevře stejnojmenné okno, kam můžeme psát SQL dotazy. Pro vytvoření nové databáze zadáme příkaz:
CREATE DATABASE slovnicek_db;
Potvrdíme kliknutím na zelenou šipku v horní části:
Před provedením příkazu se nám otevře další dialogové okno zvolíme, ve kterém klikneme na možnost Use Current Schema.
Abychom mohli zkontrolovat, že se nám databáze opravdu vytvořila a přidala mezi ostatní, klikneme na záložku Schemas pravým tlačítkem myši a zvolíme možnost Reload:
Vidíme, že v seznamu přibyla databáze slovnicek_db
. Můžeme
tedy do ní přidat novou tabulku.
Vytvoření tabulky
O tabulkách jsme si již říkali minule. Jelikož budeme chtít ukládat
slovíčka, vytvoříme si tabulku právě pro ně. Definujeme jí sloupce - to
jsou vlastnosti, které slovíčko má. Nezapomeneme na unikátní
identifikátor, tedy na id
.
Tabulku pojmenujeme slovo
a přidáme jí tři sloupce. První
bude id
typu INT
. id
nastavíme jako
PRIMARY KEY
, čímž určíme tento sloupec jako jednoznačný
identifikátor slovíčka v tabulce. Přidáme mu také hodnotu
AUTO_INCREMENT
, čímž se nastaví, že se jeho hodnota bude
automaticky inkrementovat. Dále přidáme sloupce cesky
a
anglicky
, které budou typu VARCHAR(50)
. Typ
VARCHAR(50)
je krátký text, u kterého jsme specifikovali
maximální délku maximálně 50 znaků.
Celý SQL příkaz pro vytvoření nové tabulky bude tedy vypadat takto:
CREATE TABLE slovo ( id INT PRIMARY KEY AUTO_INCREMENT, cesky VARCHAR(50) NULL, anglicky VARCHAR(50) NULL );
Vrátíme se do okna Connection ze záložky Console, kód výše sem zkopírujeme a potvrdíme:
V následujícím dialogovém okně tentokrát zvolíme možnost Select Schema a v nové nabídce vybereme naši databázi:
Do Database navigatoru znovu klikneme pravým tlačítkem myši a spustíme Reload. Zobrazí se nám nově vytvořená tabulka:
Pokud vám tabulka připomíná javovskou třídu, máte úplnou pravdu. Tabulkou definujeme společné vlastnosti nějakých entit, zde slovíček. Jednotlivé sloupce jsou poté atributy slovíček. U třídy bychom měli slovíčka jako instance, v databázové tabulce máme slovíčka jako jednotlivé řádky. Minule jsme si také říkali, že tabulky je dokonce možné mapovat přímo na třídy pomocí JPA (Hibernate). Nepředbíhejme však.
Testovací data
Nyní do tabulky vložíme data. Vrátíme se tedy opět do okna Connection, kam zadáme tento SQL příkaz:
INSERT INTO slovo (cesky, anglicky) VALUES ('počítač', 'computer'), ('míč', 'ball'), ('pes', 'dog'), ('já', 'I'), ('mít rád', 'like'), ('devbook', 'devbook');
V DB Browseru rozklikneme záložku Schemas a naši databázi
slovnicek_db
. Klikneme na Tables a na tabulku s názvem
slovo
. Objeví se nové okno, které nám umožňuje zobrazit data
v tabulce podle námi určených filtrů:
Zvolíme No Filter a zobrazí se nám přidané záznamy:
Záznamy do tabulky můžeme také přidávat a editovat bez SQL příkazů
přímo v IDE. V otevřené tabulce slovo
klikneme na +.
Na novém řádku vyplníme sloupce cesky
a anglicky
,
id
se vyplní automaticky, potvrdíme klávesou
Enter:
Nakonec musíme data nahrát do databáze na MySQL server. Kdybychom si teď tabulku otevřeli například v nástroji phpMyAdmin, žádná data bychom v ní nenašli. Pro nahrání a uložení dat stiskneme tlačítko Commit v horním panelu nad tabulkou:
Databázi máme připravenou, pokračovat budeme příště.
Příště, Databáze v Java JDBC - Výpis dat a parametry, se na ni z Javy připojíme, necháme si vypsat slovíčka z databáze do konzole a naprogramujeme slovníček, který bude překládat slovo, které uživatel zadá.