JDBC (Java Database Connectivity) je rozhranie Java API, ktoré spravuje pripojenie k databáze, vydáva dotazy a príkazy a spracováva množiny výsledkov získané z databázy. Vydaný ako súčasť JDK 1.1 v roku 1997, JDBC bol jedným z prvých komponentov vyvinutých pre vrstvu perzistencie Java.
JDBC bolo pôvodne koncipované ako API na strane klienta, ktoré umožňovalo klientovi Java komunikovať so zdrojom údajov. To sa zmenilo s JDCB 2.0, ktorý obsahoval voliteľný balík podporujúci pripojenia JDBC na strane servera. Každé nové vydanie JDBC odvtedy obsahuje aktualizácie balíka na strane klienta (java.sql
) a balík na strane servera (javax.sql
). JDBC 4.3, najaktuálnejšia verzia od tohto písania, bola vydaná ako súčasť Java SE 9 v septembri 2017.
Tento článok predstavuje prehľad JDBC, po ktorom nasleduje praktický úvod do používania rozhrania JDBC API na pripojenie klienta Java k ľahkej relačnej databáze SQLite.
Ako funguje JDBC
JDBC, vyvinuté ako alternatíva k API ODBC (Open Database Connectivity) na báze C, ponúka rozhranie na úrovni programovania, ktoré spracováva mechaniku aplikácií Java komunikujúcich s databázou alebo RDBMS. Rozhranie JDBC sa skladá z dvoch vrstiev:
- Rozhranie JDBC API podporuje komunikáciu medzi aplikáciou Java a správcom JDBC.
- Ovládač JDBC podporuje komunikáciu medzi správcom JDBC a databázovým ovládačom.
JDBC je bežné API, s ktorým interaguje váš aplikačný kód. Pod tým je ovládač pre databázu, ktorú používate, kompatibilný s JDBC.
Obrázok 1 je architektonický prehľad JDBC vo vrstve perzistencie Java.
JavaWorld /Používanie JDBC na pripojenie k databáze
Jedným z šťastných faktov programovania v ekosystéme Java je, že pravdepodobne nájdete stabilný databázový konektor JDBC pre ľubovoľnú databázu, ktorú si vyberiete. V tomto tutoriále použijeme program SQLite na zoznámenie sa s JDBC, hlavne kvôli jeho ľahkému použitiu.
Kroky na pripojenie k databáze pomocou JDBC sú tieto:
- Nainštalujte alebo vyhľadajte databázu, do ktorej chcete vstúpiť.
- Zahrňte knižnicu JDBC.
- Zaistite, aby sa vo vašej triede nachádzal požadovaný ovládač JDBC.
- Na získanie pripojenia k databáze použite knižnicu JDBC.
- Použite pripojenie na zadanie príkazov SQL.
- Po dokončení ukončite pripojenie.
Spoločne prejdeme týmito krokmi.
Nájdenie ovládača JDBC
Ak chcete nájsť ovládač pre databázu, ktorú chcete použiť, jednoducho vyhľadajte svoju databázu a JDBC na webe. Napíšete napríklad „ovládač mysql jdbc
„objaví ovládač pre MySQL. Vyzývam vás, aby ste našli databázu kompatibilnú s Java bez ovládača JDBC!
Krok 1. Stiahnite a nainštalujte SQLite
SQLite je veľmi kompaktná databáza. Nie je určený na produkčné použitie, ale je skvelou voľbou na rýchle vyskúšanie. SQLite používa súbor ako svoju funkčnú databázu bez toho, aby vyžadoval akúkoľvek inštaláciu služby alebo démona.
Ak chcete začať s týmto ukážkou, pokračujte a stiahnite si ukážkovú databázu SQLite. Rozbaľte .db
súbor a uložte ho niekam, na čo nezabudnete.
Tento súbor obsahuje funkčnú databázu založenú na súboroch, vzorovú schému a údaje, ktoré môžeme použiť.
SQL a JDBC
NoSQL sa za posledné desaťročie stal populárnym, ale najbežnejším používaným typom dátového úložiska zostávajú relačné databázy. A relačná databáza je štruktúrované úložisko pozostávajúce z tabuliek so stĺpcami a riadkami. SQL (Structured Query Language) je jazyk, ktorý architekti používajú na vytváranie, čítanie, aktualizáciu a mazanie nových záznamov v relačnej databáze. JDBC je vrstva adaptéra od Javy po SQL: poskytuje vývojárom Javy spoločné rozhranie pre pripojenie k databáze, vydávanie dotazov a príkazov a správu odpovedí.
Krok 2. Importujte JDBC do svojej aplikácie Java
Naše kódovanie by sme mohli urobiť v IDE, ale kódovanie priamo v textovom editore lepšie preukáže jednoduchosť JDBC. Najprv budete musieť mať kompatibilnú inštaláciu JDK pre váš operačný systém.
Za predpokladu, že máte nainštalované vývojárske nástroje platformy Java, môžeme začať vytvorením jednoduchého programu Java. Do svojho textového editora vložte kód zobrazený v zozname 1. Zavolajte tento súbor WhatIsJdbc.java
.
Zoznam 1. Jednoduchý program Java
trieda WhatIsJdbc {public static void main (String args []) {System.out.println ("Hello JavaWorld"); }}
Teraz kompilujte kód zadaním príkazu: javac WhatIsJdbc.java
. Pri kompilácii sa vygeneruje WhatIsJdbc.class
spis. Spustite tento súbor z príkazového riadku pomocou hovoru: java WhatIsJdbc
.
[Viac informácií o interakcii s JDK v príkazovom riadku nájdete v časti „Čo je to JDK? Úvod do súpravy Java Developer Kit“.]
Keď už máte základný program Java, môžete zahrnúť knižnice JDBC. Vložte kód z výpisu 2 do záhlavia vášho jednoduchého programu Java.
Zoznam 2. Importy JDBC
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.ResultSet; import java.sql.Statement;
Každý z týchto importov poskytuje prístup k triede, ktorá uľahčuje štandardné pripojenie k databáze Java:
Pripojenie
predstavuje pripojenie k databáze.DriverManager
získa pripojenie k databáze. (Ďalšou možnosťou jeDátový zdroj
, ktorý sa používa na združovanie pripojení. )SQLException
spracováva chyby SQL medzi aplikáciou Java a databázou.Sada výsledkov
aVyhlásenie
model množín výsledkov dát a príkazov SQL.
Čoskoro sa dočkáme každej z nich v akcii.
Krok 3. Pridajte ovládač JDBC do svojej cesty ku triede
Ďalej do svojej triedy pripojíte ovládač SQLite. A Ovládač JDBC je trieda, ktorá implementuje JDBC API pre konkrétnu databázu.
Stiahnite si ovládač SQLite z GitHubu. Určite si prečítajte najaktuálnejšie .jar
uložte a uložte niekam, kam si spomeniete.
Keď nabudúce spustíte svoj program Java, vytiahne to .jar
prihlásiť sa cez cestu triedy. Existuje niekoľko spôsobov, ako nastaviť triednu cestu. Zoznam 3 ukazuje, ako to urobiť pomocou prepínača príkazového riadku.
Zoznam 3. Spustenie ovládača SQLite na triednej ceste Java
java.exe -classpath /path-to-driver/sqlite-jdbc-3.23.1.jar :. WhatIsJdbc
Všimnite si, že sme nastavili cestu triedy tak, aby ukazovala na vodiča a miestny adresár; týmto spôsobom Java stále nájde náš súbor triedy.
Krok 4. Získajte pripojenie k databáze
Classpath má teraz prístup k ovládaču. Teraz zmeňte svoj jednoduchý súbor aplikácie Java tak, aby vyzeral ako program v zozname 4.
Výpis 4. Používanie triedy JDBC Connection na pripojenie k SQLite
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.ResultSet; import java.sql.Statement; trieda WhatIsJdbc {public static void main (String [] args) {Connection conn = null; skuste {String url = "jdbc: sqlite: path-to-db / chinook / chinook.db"; conn = DriverManager.getConnection (url); System.out.println ("Mám to!"); } catch (SQLException e) {hod nova Chyba ("Problem", e); } konečne {vyskúšať {if (conn! = null) {conn.close (); }} catch (SQLException ex) {System.out.println (ex.getMessage ()); }}}}
Zostavte a vykonajte tento kód. Za predpokladu, že všetko dobre dopadne, dostanete potvrdzujúcu správu.
Nenašiel sa vhodný vodič?
Ak sa vám zobrazila chyba, ktorá vyzerá ako „Pre server jdbc: sqlite sa nenašiel vhodný ovládač
„potom musíte znova navštíviť triednu cestu a ubezpečiť sa, že smeruje na stiahnutý ovládač. Zlyhané pripojenie ovládača je najbežnejším kameňom úrazu začiatočníkov používajúcich JDBC. Nepotite sa s ním; jednoducho to napravte.
Teraz sme pripravení na niektoré príkazy SQL.
Krok 5. Dotaz na databázu
So živým objektom spojenia v ruke môžeme robiť niečo užitočné, napríklad dopytovať sa v databáze. Výpis 5 zobrazuje spôsob dotazovania na SQLite pomocou JDBC Pripojenie
a Vyhlásenie
predmety.
Zoznam 5. Dotazovanie na databázu pomocou JDBC
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.ResultSet; import java.sql.Statement; trieda WhatIsJdbc {public static void main (String [] args) {Connection conn = null; skus {String url = "jdbc: sqlite: cesta k db-suboru / chinook / chinook.db"; conn = DriverManager.getConnection (url); Výpis stmt = null; Reťazcový dopyt = "vybrať * z albumov"; try {stmt = conn.createStatement (); ResultSet rs = stmt.executeQuery (dopyt); while (rs.next ()) {Názov reťazca = rs.getString ("názov"); System.out.println (názov); }} chytit (SQLException e) {vyhodit novu Error ("Problem", e); } nakoniec {if (stmt! = null) {stmt.close (); }}} chytit (SQLException e) {vyhodit novu Error ("Problem", e); } konečne {vyskúšať {if (conn! = null) {conn.close (); }} catch (SQLException ex) {System.out.println (ex.getMessage ()); }}}}
V zozname 5 používame naše Pripojenie
predmet na získanie a Vyhlásenie
objekt: conn.createStatement ()
. Tento objekt potom použijeme na vykonanie dotazu SQL: stmt.executeQuery (dopyt)
.
The executeQuery
príkaz vráti a Sada výsledkov
objekt, ktorý potom použijeme na iteráciu údajov s while (rs.next ())
. V tomto príklade by ste ako výstup mali vidieť názvy albumov, na ktoré sme sa pýtali.
Všimnite si, že sme tiež ukončili spojenie prostredníctvom hovoru na číslo conn.close ()
.
Sieťové pripojenia s JDBC
Reťazec databázového pripojenia v zozname 5 je pre miestne pripojenie: jdbc: sqlite: cesta k db-súboru / chinook / chinook.db
. Na prístup k databáze prostredníctvom siete by reťazec pripojenia musel obsahovať adresu URL siete a (zvyčajne) poverenia na prístup k nej.
Robiť viac s JDBC
Doteraz sme prebrali základy používania JDBC na pripojenie k databáze a vydávanie príkazov SQL. Zatiaľ čo Vyhlásenia
s a Sada výsledkov
Ak fungujú dobre pre bežné scenáre, budete pravdepodobne potrebovať ďalšie možnosti pre väčšie alebo zložitejšie aplikácie. Našťastie sa knižnica JDBC neustále vyvíja tak, aby vyhovovala všetkým potrebám prístupu k databáze.
Pripravené vyhlásenia
Jedným z jednoduchých spôsobov, ako zvýšiť flexibilitu vášho kódu, je nahradiť Vyhlásenie
trieda s Pripravené vyhlásenie
, ako je uvedené v zozname 6.
Zoznam 6. Používanie pripravených vyhlásení JDBC
String prepState = "vložiť do albumov hodnoty (?,?);"; PreparedStatement prepState = connection.prepareStatement (sql); prepState.setString (1, "Uprising"); prepState.setString (2, „Bob Marley and the Wailers“); int linesAffected = readyStatement.executeUpdate ();
Pripravené vyhlásenie
nahrádza Vyhlásenie
pevne zakódované hodnoty s otáznikmi (?
). Použitím Pripravené vyhlásenie
s optimalizuje váš kód na opätovné použitie: a Pripravené vyhlásenie
je zostavený iba raz a potom ho možno znova použiť s rôznymi parametrami. Ako sa rozrastá vaša kódová základňa, namiesto hackovania samotného objektu reťazca jednoducho vkladáte nové hodnoty.
Dávkové aktualizácie
Kedykoľvek má aplikácia k vydaniu niekoľko aktualizácií, ich hromadné vykonávanie môže výrazne prospieť výkonu. Podstata dávkovanie je zobrať viac aktualizácií a zhromaždiť ich spolu, potom ich vydať naraz. Zoznam 7 používa dávkové metódy JDBC na vykonanie hromadnej aktualizácie niekoľkých Pripravené vyhlásenie
s.
Zoznam 7. Dávkovanie s ReadyedStatement
prepState.setString (1, "Uprising"); prepState.setString (2, „Bob Marley and the Wailers“); readyStatement.addBatch (); prepState.setString (1, "Kvetiny"); prepState.setString (2, „Tom Petty and the Heartbreakers“); readyStatement.addBatch (); int [] riadkyAffected = readyStatement.executeBatch ();
Transakcie JDBC
Transakcie v relačných databázach umožňujú, aby bola sada aktualizácií zabalená do interakcie, ktorá buď uspeje, alebo úplne zlyhá. Základom používania transakcie prostredníctvom JDBC je povedať systému, aby sa obrátil vypnutý automatické potvrdenie a potom ručne oznámte systému, aby sa zaviazalo, keď skončíte. V predvolenom nastavení je automatické potvrdenie na, čo znamená kedykoľvek executeUpdate
alebo executeInsert
je spustený, príkaz je potvrdený.
Výpis 8 zobrazuje malý výsek transakcie JDBC.
Zoznam 8. Transakcie JDBC
connection.setAutoCommit (false); // Viackrát použite executeUpdate connection.commit ();
Kedy connection.commit ()
dôjde k pokusu o všetky aktualizácie zabalené vo vnútri, a ak zlyhajú, všetky budú vrátené späť.
V JDBC 4.3 je oveľa viac funkcií, ktoré stojí za preskúmanie, vrátane používania Vyvolateľné vyhlásenie
pre uložené procedúry, pomocou Dátový zdroj
objekty na zlepšenie výkonu aplikácií (najmä prostredníctvom združovania pripojení) a konverziu sady JDBC ResultSet na prúd Java.
Funkcie špecifické pre databázu
Aj keď každá databáza kompatibilná s JDBC ponúka rovnaké základné funkcie pre pripojenie a interakciu s databázou pomocou SQL, niektoré databázy fungujú viac ako iné. Napríklad Oracle DB ponúka ukladanie výsledkov do pamäte cache, čo špecifikácia JDBC nevyžaduje. Tu je príklad:
conn.prepareStatement ("select / * + result_cache * / * od zamestnancov, kde employee_id <: 1");
Tento príklad je prevzatý z dokumentácie k ovládaču JDBC OCI spoločnosti Oracle.
Záver
JDBC je jedno z najstarších API v Jave a poskytuje ľahko použiteľné riešenie pre jednu z trvalých potrieb vývoja aplikácií Java. Ak poznáte iba pár hovorov JDBC, ktoré sú uvedené v tomto článku, začnete používať JDBC na pripojenie k prakticky akejkoľvek databáze. Keď tieto príkazy zrušíte, môžete začať skúmať niektoré sofistikovanejšie možnosti, ktoré sú zabudované do JDBC.
Aj keď JDBC postačuje na jednoduchšie aplikácie, väčšina vývojárov sa pri vývoji formálnejšej vrstvy prístupu k údajom nakoniec obráti na rozhranie Java Persistence API (JPA). JPA vyžaduje náročnejšiu prácu a sofistikovanejšie pochopenie aplikačnej architektúry, ale vytvára vám konzistentnejšiu, izolovanejšiu a dobre definovanú vrstvu prístupu k údajom. V sprievodcovi tohto článku „Čo je to JPA? Úvod do rozhrania Java Persistence API“ nájdete ďalšie informácie o vývoji vrstvy na vytrvalosť údajov pre vaše aplikácie Java.
Tento príbeh, „Čo je to JDBC? Úvod do pripojenia k databáze Java“, bol pôvodne publikovaný spoločnosťou JavaWorld.