2. diel - Návrh MySQL databázy v IntelliJ IDE
V minulom dieli, Úvod do databáz v Jave, sme si vysvetlili prečo je dobrý nápad pre prácu s dátami používať práve databázu. Hovorili sme si tiež, že v Jave sú pre prácu s databázou 2 hlavné prístupy: JDBC a JPA.
V dnešnom tutoriále si vytvoríme novú databázu, na ktorej sa v ďalších dieloch budeme učiť. Používať budeme databázu MySQL. Pokiaľ chcete v Jave pracovať s inou databázou, môžete si pokojne prečítať tento seriál, pretože SQL dotazy u rôznych databáz sú veľmi podobné a základné otázky dokonca úplne rovnaké.
Inštalácia databázy
Ako prvé samozrejme musíme mať databázu nainštalovanú. Pokiaľ sme s MySQL ešte nikdy nepracovali, mali by sme si najskôr prečítať seriál MySQL, kde sa dozvieme všetko potrebné. MySQL databázu môžeme nainštalovať buď samostatne z webu http://dev.mysql.com/downloads/ alebo napr. v balíku XAMPP. My zvolíme druhú možnosť a budeme postupovať podľa pokynov z lekcie MySQL krok za krokom - Úvod do MySQL a príprava prostredia.
Inštalácia pluginu Database navigator
Database navigator je plugin pre IntelliJ, ktorý umožňuje prezerať databázy priamo z IntelliJ IDEA. Umožňuje tiež spúšťať SQL skripty, prezerať a upravovať jednotlivé databázy.
Pre inštaláciu klikneme v IntelliJ na záložku Plugins v hlavnom
menu a do vyhľadávača napíšeme Database navigator
:
Klikneme na tlačidlo Install a potom na tlačidlo Restart IDE, ktoré sa nám objaví, akonáhle je plugin nainštalovaný.
Práca s databázou v IntelliJ IDEA
Všetku administráciu MySQL databázy budeme robiť cez IDE. Predpokladáme, že databázu máme nainštalovanú a spustenú.
Pripojenie k MySQL databáze
V IntelliJ si založíme nový Java projekt s názvom
Dictionary
. V ľavom paneli klikneme na novú ikonku DB
Browser, potom na tlačidlo + a z vyberaného zoznamu vyberieme
MySQL:
Tým sa nám v IDE otvorí nové okno Connection, v ktorom iba
zmeníme spôsob autentifikácie na možnosť User a ako meno
užívateľa zadáme root
:
Port pre pripojenie je nastavený na hodnotu 3306
a pri
položke Host je vyplnené localhost
, čo znamená, že
nám databáza beží na tom istom počítači, ako aplikácia. Pripojenie
môžeme otestovať tlačidlom Test Connection, aby sme sa uistili, že
sme zadali správne údaje:
Teraz sa k databáze pripojíme tlačidlom Apply. Po úspešnom pripojení sa nám v záložke Schemas zobrazia všetky databázy a tabuľky uložené na MySQL serveri.
Vytvorenie databázy
Pre náš projekt vytvoríme k existujúcim databázam novú databázu,
ktorú nazveme dictionary_db
. Mohli by sme to urobiť pomocou
nástroja phpMyAdmin, ako sme zvyknutí z kurzu MySQL. My však databázu
vytvoríme z IntelliJ pomocou nášho doplnku Database navigator.
Rozbalíme kartu Console a klikneme na Connection, čím sa nám na pravej strane otvorí rovnomenné okno, do ktorého môžeme písať SQL dotazy. Pre vytvorenie novej databázy zadáme príkaz:
CREATE DATABASE dictionary_db;
Potvrdíme kliknutím na zelenú šípku v hornej časti:
Pred vykonaním príkazu sa nám otvorí ďalšie dialógové okno, v ktorom klikneme na možnosť Use Current Schema.
Aby sme mohli skontrolovať, že sa nám databáza naozaj vytvorila a pridala medzi ostatné, klikneme na záložku Schemas pravým tlačidlom myši a zvolíme možnosť Reload:
Vidíme, že do zoznamu bola pridaná databáza dictionary_db
.
Môžeme do nej teda pridať novú tabuľku.
Vytvorenie tabuľky
O tabuľkách sme si už hovorili minule. Keďže budeme chcieť ukladať
slovíčka, vytvoríme si tabuľku práve pre nich. Definujeme jej stĺpce –
to sú vlastnosti, ktoré slovíčko má. Nezabudneme na unikátny
identifikátor, teda na id
.
Tabuľku pomenujeme word
a pridáme jej tri stĺpce. Prvá bude
id
typu INT
. id
nastavíme ako
PRIMARY KEY
, čím určíme tento stĺpec ako jednoznačný
identifikátor slovíčka v tabuľke. Pridáme mu tiež hodnotu
AUTO_INCREMENT
, čím sa nastaví, že sa jeho hodnota bude
automaticky inkrementovať. Ďalej pridáme stĺpce english
a
spanish
, ktoré budú typu VARCHAR(50)
. Typ
VARCHAR(50)
je krátky text, pri ktorom sme špecifikovali
maximálnu dĺžku maximálne 50 znakov.
Celý SQL príkaz pre vytvorenie novej tabuľky bude teda vyzerať takto:
CREATE TABLE word ( id INT PRIMARY KEY AUTO_INCREMENT, english VARCHAR(50) NULL, spanish VARCHAR(50) NULL );
Vrátime sa do okna Connection zo záložky Console, kód vyššie sem skopírujeme a potvrdíme:
V nasledujúcom dialógovom okne tentoraz zvolíme možnosť Select Schema av novej ponuke vyberieme našu databázu:
Do Database navigatora znova klikneme pravým tlačidlom myši a spustíme Reload. Zobrazí sa nám novo vytvorená tabuľka:
Pokiaľ vám tabuľka pripomína javovskú triedu, máte úplnú pravdu. Tabuľkou definujeme spoločné vlastnosti nejakých entít, tu slovíček. Jednotlivé stĺpce sú potom atribúty slovíčok. Pri triede by sme mali slovíčka ako inštancie, v databázovej tabuľke máme slovíčka ako jednotlivé riadky. Minule sme si tiež hovorili, že tabuľky je dokonca možné mapovať priamo na triedy pomocou JPA (Hibernate). Nepredbiehajme však.
Testovacie dáta
Teraz do tabuľky vložíme dáta. Vrátime sa teda opäť do okna Connection, kam zadáme tento SQL príkaz:
INSERT INTO word (english, spanish) VALUES ('computer', 'ordenador'), ('ball', 'pelota'), ('dog', 'perro'), ('I', 'yo'), ('love', 'amor'), ('ICT', 'ICT');
V DB Browseri rozklikneme záložku Schemas a našu databázu
dictionary_db
. Kliknite na Tables a na tabuľku s názvom
word
. Zobrazí sa nové okno, ktoré nám umožňuje zobraziť
dáta v tabuľke podľa nami určených filtrov:
Zvolíme No Filter a zobrazia sa nám pridané záznamy:
Záznamy do tabuľky môžeme tiež pridávať a editovať bez SQL príkazov
priamo v IDE. V otvorenej tabuľke word
klikneme na +. Na
novom riadku vyplníme stĺpce english
a spanish
,
id
sa vyplní automaticky, potvrdíme klávesom
Enter:
Nakoniec musíme dáta nahrať do databázy na MySQL server. Keby sme si teraz tabuľku otvorili napríklad v nástroji phpMyAdmin, žiadne dáta by sme v nej nenašli. Pre nahranie a uloženie dát stlačíme tlačidlo Commit v hornom paneli nad tabuľkou:
Databázu máme pripravenú, pokračovať budeme nabudúce.
Nabudúce, Databázy v Java JDBC - Výpis dát a parametre, sa na ňu z Javy pripojíme, necháme si vypísať slovíčka z databázy do konzoly a naprogramujeme slovníček, ktorý bude prekladať slovo, ktoré používateľ zadá.