JDBC (Java Database Connectivity) je rozhraní Java API, které spravuje připojení k databázi, vydává dotazy a příkazy a zpracovává sady výsledků získané z databáze. Vydáno jako součást JDK 1.1 v roce 1997, JDBC byla jednou z prvních komponent vyvinutých pro vrstvu persistence Java.
JDBC bylo původně koncipováno jako rozhraní API na straně klienta, které umožňuje klientovi Java komunikovat se zdrojem dat. To se změnilo s JDCB 2.0, který zahrnoval volitelný balíček podporující připojení JDBC na straně serveru. Každé nové vydání JDBC od té doby obsahuje aktualizace obou balíků na straně klienta (java.sql
) a balíček na straně serveru (javax.sql
). JDBC 4.3, nejnovější verze tohoto psaní, byla vydána jako součást Java SE 9 v září 2017.
Tento článek představuje přehled JDBC, následovaný praktickým úvodem do používání rozhraní JDBC API k připojení klienta Java k odlehčené relační databázi SQLite.
Jak JDBC funguje
JDBC, vyvinutý jako alternativa k rozhraní API ODBC (Open Database Connectivity) na bázi C, nabízí rozhraní na úrovni programování, které zpracovává mechaniku aplikací Java komunikujících s databází nebo RDBMS. Rozhraní JDBC se skládá ze dvou vrstev:
- Rozhraní JDBC API podporuje komunikaci mezi aplikací Java a správcem JDBC.
- Ovladač JDBC podporuje komunikaci mezi správcem JDBC a ovladačem databáze.
JDBC je běžné API, se kterým kód vaší aplikace interaguje. Pod tím je ovladač kompatibilní s JDBC pro databázi, kterou používáte.
Obrázek 1 je architektonický přehled JDBC ve vrstvě persistence Java.
JavaWorld /Použití JDBC pro připojení k databázi
Jedním z šťastných faktů programování v ekosystému Java je, že pravděpodobně najdete stabilní databázový konektor JDBC pro libovolnou databázi, kterou si vyberete. V tomto tutoriálu použijeme k seznámení s JDBC SQLite, hlavně proto, že je tak snadno použitelný.
Kroky pro připojení k databázi pomocí JDBC jsou následující:
- Nainstalujte nebo vyhledejte databázi, ke které chcete přistupovat.
- Zahrňte knihovnu JDBC.
- Ujistěte se, že ovladač JDBC, který potřebujete, je ve vaší třídě.
- K získání připojení k databázi použijte knihovnu JDBC.
- Pomocí připojení můžete vydávat příkazy SQL.
- Po dokončení připojení ukončete.
Projdeme tyto kroky společně.
Nalezení ovladače JDBC
Chcete-li najít ovladač pro databázi, kterou chcete použít, jednoduše vyhledejte databázi a JDBC na webu. Například zadáním „ovladač jdbc mysql
"objeví ovladač pro MySQL. Vyzývám vás, abyste našli databázi kompatibilní s Java bez ovladače JDBC!
Krok 1. Stáhněte a nainstalujte SQLite
SQLite je velmi kompaktní databáze. Není určen pro produkční použití, ale je skvělou volbou pro rychlé vyzkoušení. SQLite používá soubor jako svou funkční databázi, aniž by vyžadoval jakoukoli instalaci služby nebo démona.
Chcete-li začít s touto ukázkou, pokračujte a stáhněte si ukázkovou databázi SQLite. Rozbalte .db
soubor a uložte jej někam, kam nezapomenete.
Tento soubor obsahuje jak funkční souborovou databázi, tak ukázkové schéma a data, která můžeme použít.
SQL a JDBC
NoSQL se za poslední desetiletí stal populárním, ale relační databáze zůstávají nejběžnějším typem používaného úložiště dat. A relační databáze je strukturované úložiště skládající se z tabulek se sloupci a řádky. SQL (Structured Query Language) je jazyk, který architekti dat používají k vytváření, čtení, aktualizaci a mazání nových záznamů v relační databázi. JDBC je vrstva adaptéru z prostředí Java na SQL: poskytuje vývojářům prostředí Java společné rozhraní pro připojení k databázi, vydávání dotazů a příkazů a správu odpovědí.
Krok 2. Importujte JDBC do své aplikace Java
Mohli bychom udělat naše kódování v IDE, ale kódování přímo v textovém editoru lépe předvede jednoduchost JDBC. Pro začátek budete potřebovat kompatibilní instalaci JDK pro váš operační systém.
Za předpokladu, že máte nainstalované vývojové nástroje platformy Java, můžeme začít vytvořením jednoduchého programu Java. V textovém editoru vložte kód zobrazený v Seznamu 1. Volejte tento soubor WhatIsJdbc.java
.
Výpis 1. Jednoduchý program Java
třída WhatIsJdbc {public static void main (String args []) {System.out.println ("Hello JavaWorld"); }}
Nyní zkompilujte kód zadáním příkazu: javac WhatIsJdbc.java
. Kompilace vygeneruje WhatIsJdbc.class
soubor. Spusťte tento soubor z příkazového řádku s voláním: java WhatIsJdbc
.
[Další informace o interakci s JDK na příkazovém řádku najdete v části „Co je to JDK? Úvod do sady Java Developer Kit“.]
Jakmile máte základní program Java, můžete zahrnout knihovny JDBC. Vložte kód z výpisu 2 do hlavy vašeho jednoduchého programu Java.
Výpis 2. Importy JDBC
importovat java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.ResultSet; import java.sql.Statement;
Každý z těchto importů poskytuje přístup ke třídě, která usnadňuje standardní připojení k databázi Java:
Spojení
představuje připojení k databázi.DriverManager
získá připojení k databázi. (Další možností jeZdroj dat
, který se používá ke sdružování připojení. )SQLException
zpracovává chyby SQL mezi aplikací Java a databází.ResultSet
aProhlášení
modelovat sady výsledků dat a příkazy SQL.
Brzy uvidíme každou z nich v akci.
Krok 3. Přidejte ovladač JDBC do své cesty ke třídě
Dále přidáte ovladač SQLite do své cesty ke třídě. A Ovladač JDBC je třída, která implementuje rozhraní JDBC API pro konkrétní databázi.
Stáhněte si ovladač SQLite z GitHubu. Nezapomeňte získat nejnovější .sklenice
soubor a uložte jej někam, kde si pamatujete.
Až příště spustíte program Java, stáhnete to .sklenice
přihlaste se přes cestu ke třídě. Existuje několik způsobů, jak nastavit cestu ke třídě. Výpis 3 ukazuje, jak to udělat pomocí přepínače příkazového řádku.
Výpis 3. Spuštění ovladače SQLite na třídě Java Class
java.exe -classpath /path-to-driver/sqlite-jdbc-3.23.1.jar :. WhatIsJdbc
Všimněte si, že jsme nastavili cestu ke třídě tak, aby ukazovala na řidiče a místní adresář; tímto způsobem Java stále najde náš soubor třídy.
Krok 4. Získejte připojení k databázi
Classpath má nyní přístup k ovladači. Nyní změňte svůj jednoduchý soubor aplikace Java tak, aby vypadal jako program ve Výpisu 4.
Výpis 4. Použití třídy JDBC Connection pro připojení k SQLite
importovat java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.ResultSet; import java.sql.Statement; třída WhatIsJdbc {public static void main (String [] args) {Connection conn = null; zkuste {String url = "jdbc: sqlite: path-to-db / chinook / chinook.db"; conn = DriverManager.getConnection (url); System.out.println ("Mám to!"); } catch (SQLException e) {hodit novou chybu ("Problém", e); } konečně {try {if (conn! = null) {conn.close (); }} catch (SQLException ex) {System.out.println (ex.getMessage ()); }}}}
Zkompilujte a spusťte tento kód. Za předpokladu, že vše půjde dobře, dostanete potvrzující zprávu.
Nebyl nalezen vhodný ovladač?
Pokud jste obdrželi chybu, která vypadá jako „Nebyl nalezen vhodný ovladač pro jdbc: sqlite
„pak musíte znovu navštívit třídu cesty a ujistit se, že směřuje na stažený ovladač. Selhání připojení ovladače je nejčastější překážkou pro začátečníky používající JDBC. Nepotěšte se jím; jen to opravte.
Nyní jsme připraveni na některé příkazy SQL.
Krok 5. Dotaz na databázi
S živým objektem připojení v ruce můžeme udělat něco užitečného, například dotazovat se na databázi. Výpis 5 ukazuje, jak dotazovat na SQLite pomocí JDBC Spojení
a Prohlášení
předměty.
Výpis 5. Dotazování na databázi pomocí JDBC
importovat java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; importovat java.sql.ResultSet; importovat java.sql.Statement; třída WhatIsJdbc {public static void main (String [] args) {Connection conn = null; zkuste {String url = "jdbc: sqlite: cesta k souboru db / chinook / chinook.db"; conn = DriverManager.getConnection (url); Prohlášení stmt = null; Řetězcový dotaz = "vybrat * z alb"; try {stmt = conn.createStatement (); ResultSet rs = stmt.executeQuery (dotaz); while (rs.next ()) {Název řetězce = rs.getString ("název"); System.out.println (název); }} catch (SQLException e) {hodit novou chybu ("Problém", e); } konečně {if (stmt! = null) {stmt.close (); }}} catch (SQLException e) {hodit novou chybu ("Problém", e); } konečně {try {if (conn! = null) {conn.close (); }} catch (SQLException ex) {System.out.println (ex.getMessage ()); }}}}
V seznamu 5 používáme naše Spojení
předmět k získání a Prohlášení
objekt: conn.createStatement ()
. Poté použijeme tento objekt k provedení dotazu SQL: stmt.executeQuery (dotaz)
.
The executeQuery
příkaz vrátí a ResultSet
objekt, který pak použijeme k iteraci dat s while (rs.next ())
. V tomto příkladu byste měli jako výstup vidět názvy alb, na které jsme se dotazovali.
Všimněte si, že jsme také ukončili spojení prostřednictvím volání na conn.close ()
.
Síťová připojení s JDBC
Řetězec připojení k databázi v seznamu 5 je pro místní připojení: jdbc: sqlite: cesta k souboru db / chinook / chinook.db
. Pro přístup k databázi prostřednictvím sítě by řetězec připojení musel obsahovat adresu URL sítě a (obvykle) pověření pro přístup k ní.
Dělat více s JDBC
Zatím jsme pokryli základy používání JDBC pro připojení k databázi a vydávání příkazů SQL. Zatímco Prohlášení
s a ResultSet
Pokud dobře fungují pro běžné scénáře, budete pravděpodobně potřebovat další možnosti pro větší nebo složitější aplikace. Naštěstí se knihovna JDBC nadále vyvíjí tak, aby vyhovovala většině potřeb přístupu k databázi.
Připravená prohlášení
Jedním ze snadných způsobů, jak zvýšit flexibilitu kódu, je nahradit Prohlášení
třída s Připravené prohlášení
, jak je uvedeno v seznamu 6.
Výpis 6. Používání připravených prohlášení JDBC
String prepState = "vložit do alb hodnoty (?,?);"; PreparedStatement prepState = connection.prepareStatement (sql); prepState.setString (1, "Uprising"); prepState.setString (2, „Bob Marley and the Wailers“); int linesAffected = readyStatement.executeUpdate ();
Připravené prohlášení
nahrazuje Prohlášení
pevně zakódované hodnoty s otazníky (?
). Použitím Připravené prohlášení
s optimalizuje váš kód pro opětovné použití: a Připravené prohlášení
je kompilován pouze jednou a poté může být znovu použit s různými parametry. Jak vaše základna kódu roste, jednoduše vložíte nové hodnoty do příkazu, místo toho, abyste hackli samotný objekt řetězce.
Dávkové aktualizace
Kdykoli má aplikace k vydání několik aktualizací, jejich provádění v dávkách může výrazně prospět výkonu. Podstata dávkování je vzít více aktualizací a shromáždit je společně, pak je vydat všechny najednou. Výpis 7 používá dávkové metody JDBC k provedení dávkové aktualizace několika Připravené prohlášení
s.
Výpis 7. Dávkování s PreparedStatement
prepState.setString (1, "Uprising"); prepState.setString (2, „Bob Marley and the Wailers“); readyStatement.addBatch (); prepState.setString (1, "Květy"); prepState.setString (2, „Tom Petty and the Heartbreakers“); readyStatement.addBatch (); int [] řádkyAffected = připravenýStatement.executeBatch ();
Transakce JDBC
Transakce v relačních databázích umožňují zabalení sady aktualizací do interakce, která buď uspěje, nebo zcela selže. Základem používání transakce prostřednictvím JDBC je říct systému, aby se otočil vypnuto automatické potvrzení a poté ručně řekněte systému, aby se zavázal, až budete hotovi. Ve výchozím nastavení je automatické potvrzení na, což znamená kdykoli executeUpdate
nebo executeInsert
je spuštěn, příkaz je potvrzen.
Výpis 8 ukazuje malou část transakce JDBC.
Výpis 8. JDBC transakce
connection.setAutoCommit (false); // Několikrát použijte executeUpdate connection.commit ();
Když connection.commit ()
dojde k pokusu o všechny aktualizace zabalené uvnitř, a pokud dojde k chybě, všechny budou vráceny zpět.
Existuje mnoho dalších funkcí v JDBC 4.3, které stojí za prozkoumání, včetně použití Vyvolatelné prohlášení
pro uložené procedury pomocí Zdroj dat
objekty pro lepší výkon aplikací (zejména prostřednictvím sdružování připojení) a převod sady výsledků JDBC na stream Java.
Funkce specifické pro databázi
Ačkoli každá databáze kompatibilní s JDBC nabízí stejné základní funkce pro připojení a interakci s databází pomocí SQL, některé databáze fungují více než jiné. Například Oracle DB nabízí ukládání výsledků do mezipaměti, které specifikace JDBC nevyžaduje. Zde je příklad:
conn.prepareStatement ("select / * + result_cache * / * od zaměstnanců, kde employee_id <: 1");
Tento příklad je převzat z dokumentace k ovladači JDBC OCI společnosti Oracle.
Závěr
JDBC je jedno z nejstarších API v Javě a poskytuje snadno použitelné řešení pro jednu z trvalých potřeb vývoje Java aplikací. Znalost jen několika volání JDBC předvedených v tomto článku vám umožní začít používat JDBC pro připojení k prakticky jakékoli databázi. Jakmile tyto příkazy zrušíte, můžete začít zkoumat některé sofistikovanější možnosti, které byly integrovány do JDBC.
Zatímco JDBC je pro jednodušší aplikace dostačující, většina vývojářů nakonec vyhledá rozhraní Java Persistence API (JPA), aby vytvořila formálnější vrstvu přístupu k datům. SPS vyžaduje náročnější práci a sofistikovanější porozumění aplikační architektuře, ale vytváří vám konzistentnější, izolovanější a přesně definovanou vrstvu přístupu k datům. V doprovodném článku k tomuto článku „Co je to JPA? Úvod do rozhraní Java Persistence API“ najdete další informace o vývoji vrstvy persistence dat pro vaše aplikace Java.
Tento příběh „Co je JDBC? Úvod do připojení k databázi Java“ byl původně publikován společností JavaWorld.