Programovanie

Čo je JDBC? Úvod do konektivity databázy Java

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:

  1. Rozhranie JDBC API podporuje komunikáciu medzi aplikáciou Java a správcom JDBC.
  2. 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:

  1. Nainštalujte alebo vyhľadajte databázu, do ktorej chcete vstúpiť.
  2. Zahrňte knižnicu JDBC.
  3. Zaistite, aby sa vo vašej triede nachádzal požadovaný ovládač JDBC.
  4. Na získanie pripojenia k databáze použite knižnicu JDBC.
  5. Použite pripojenie na zadanie príkazov SQL.
  6. 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 je Dá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 a Vyhlá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ásenias a Sada výsledkovAk 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áseniepevne zakódované hodnoty s otáznikmi (?). Použitím Pripravené vyhlásenies 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ásenies.

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.

$config[zx-auto] not found$config[zx-overlay] not found