Připojení k databázi Java - Java Database Connectivity
Vývojáři | Oracle Corporation |
---|---|
Stabilní uvolnění | JDBC 4.3 / 21. září 2017 |
Operační systém | Cross-platform |
Typ | Data access API |
webová stránka | Průvodce JDBC API |
Připojení k databázi Java (JDBC) je aplikační programovací rozhraní (API) pro programovací jazyk Jáva, který definuje, jak může klient přistupovat k databáze. Jedná se o technologii přístupu k datům založenou na prostředí Java, která se používá pro připojení k databázi Java. Je součástí Java Standard Edition platforma, od Oracle Corporation. Poskytuje metody dotazování a aktualizace dat v databázi a je orientován na relační databáze. JDBC kODBC most umožňuje připojení k jakémukoli zdroji dat přístupnému ODBC v Virtuální stroj Java (JVM) hostitelské prostředí.
Historie a implementace
Sun Microsystems vydal JDBC jako součást Vývojová sada Java (JDK) 1.1 dne 19. února 1997.[1]Od té doby je součástí Platforma Java, standardní vydání (Java SE).
Třídy JDBC jsou obsaženy v Balíček Java java.sql
a javax.sql
.
Počínaje verzí 3.1 byl JDBC vyvíjen pod Proces komunity Java. JSR 54 specifikuje JDBC 3.0 (zahrnuto v J2SE 1.4), JSR 114 specifikuje doplňky JDBC Rowset a JSR 221 je specifikace JDBC 4.0 (součástí Java SE 6).[2]
JDBC 4.1, je specifikováno vydáním údržby 1 JSR 221[3] a je součástí Java SE 7.[4]
JDBC 4.2, je specifikováno v údržbovém vydání 2 JSR 221[5] a je součástí Java SE 8.[6]
Nejnovější verze JDBC 4.3 je specifikována v údržbovém vydání 3 JSR 221[7] a je součástí Java SE 9.[8]
Funkčnost
JDBC ('Java Database Connectivity') umožňuje existovat více implementací a být používány stejnou aplikací. API poskytuje mechanismus pro dynamické načítání správných balíčků Java a jejich registraci pomocí Správce ovladačů JDBC. Správce ovladačů se používá jako továrna na připojení pro vytváření připojení JDBC.
Připojení JDBC podporují vytváření a provádění příkazů. Mohou to být aktualizační příkazy, jako například SQL VYTVOŘIT, VLOŽIT, AKTUALIZACE a VYMAZAT, nebo to mohou být příkazy dotazu jako VYBRAT. Uložené procedury lze navíc vyvolat prostřednictvím připojení JDBC. JDBC představuje příkazy využívající jednu z následujících tříd:
Tvrzení
- výpis je pokaždé odeslán na databázový server.Připravené prohlášení
- prohlášení je uloženo do mezipaměti a poté exekuční cesta je předem určen na databázovém serveru, což umožňuje jeho efektivní provedení vícekrát.Vyvolatelné prohlášení
- slouží k provedení uložené procedury v databázi.
Aktualizační příkazy jako INSERT, UPDATE a DELETE vracejí počet aktualizací, který udává, kolik řádky byly ovlivněny v databázi. Tato prohlášení nevracejí žádné další informace.
Příkazy dotazu vracejí sadu výsledků řádků JDBC. Sada výsledků řádku se používá k procházení sada výsledků. Individuální sloupce v řádku jsou vyvolány buď podle jména, nebo podle čísla sloupce. Ve výsledkové sadě může být libovolný počet řádků. Sada výsledků řádku obsahuje metadata, která popisují názvy sloupců a jejich typy.
V souboru je rozšíření základního rozhraní JDBC API javax.sql
.
Připojení JDBC jsou často spravována prostřednictvím fond připojení spíše než získat přímo od řidiče.
Datový typ Oracle | setXXX () Metody |
---|---|
CHAR | setString () |
VARCHAR2 | setString () |
ČÍSLO | setBigDecimal () |
setBoolean () | |
setByte () | |
setShort () | |
setInt () | |
setLong () | |
setFloat () | |
setDouble () | |
CELÉ ČÍSLO | setInt () |
PLOVÁK | setDouble () |
CLOB | setClob () |
KAPKA | setBlob () |
DRSNÝ | setBytes () |
DLOUHODOBÉ | setBytes () |
DATUM | setDate () |
setTime () | |
setTimestamp () |
Příklady
Pokud aplikace Java potřebuje připojení k databázi, jeden z DriverManager.getConnection ()
metody se používá k vytvoření připojení JDBC. Použitá adresa URL závisí na konkrétní databázi a ovladači JDBC. Vždy to začne protokolem „jdbc:“, ale zbytek je na konkrétním prodejci.
Spojení spoj = DriverManager.getConnection( "jdbc: somejdbcvendor: další data potřebná od některého dodavatele jdbc", "myLogin", "moje heslo");Snaž se { / * zde používáte připojení * /} Konečně { // Je důležité ukončit připojení, až budete hotovi Snaž se { spoj.zavřít(); } úlovek (Vrhací E) { / * Propagujte původní výjimku místo toho, který chcete právě přihlásit * / záznamník.varovat(„Nelze ukončit připojení JDBC“,E); }}
Počínaje Java SE 7 můžete používat Java vyzkoušet zdroje příkaz pro zjednodušení výše uvedeného kódu:
Snaž se (Spojení spoj = DriverManager.getConnection( "jdbc: somejdbcvendor: další data potřebná od některého dodavatele jdbc", "myLogin", "moje heslo")) { / * zde používáte připojení * /} // virtuální počítač se postará o ukončení připojení
Jakmile je navázáno připojení, lze vytvořit výpis.
Snaž se (Tvrzení známka = spoj.createStatement()) { známka.executeUpdate("INSERT INTO MyTable (name) VALUES ('my name')" ");}
Všimněte si, že připojení, příkazy a sady výsledků se často spojují operační systém zdroje, jako jsou zásuvky nebo deskriptory souborů. V případě připojení ke vzdáleným databázovým serverům jsou na serveru vázány další zdroje, např. kurzory pro aktuálně otevřené sady výsledků zavřít()
jakýkoli objekt JDBC, jakmile hraje svoji roli;odvoz odpadu nemělo by se na to spoléhat. Výše uvedená konstrukce try-with-resources je vzor kódu, který to vylučuje.
Data se načítají z databáze pomocí mechanismu dotazu na databázi. Níže uvedený příklad ukazuje vytvoření příkazu a provedení dotazu.
Snaž se (Tvrzení známka = spoj.createStatement(); ResultSet rs = známka.executeQuery(„SELECT * FROM MyTable“)) { zatímco (rs.další()) { int numColumns = rs.getMetaData().getColumnCount(); pro (int i = 1; i <= numColumns; i++) { // Čísla sloupců začínají na 1. // Ve výsledkové sadě je také mnoho metod pro návrat // sloupec jako konkrétní typ. Viz dokumentace Sun // pro seznam platných převodů. Systém.ven.tisk( „SLOUPEC“ + i + " = " + rs.getObject(i)); } }}
Příklad a Připravené prohlášení
dotaz, pomocí spoj
a třída z prvního příkladu.
Snaž se (Připravené prohlášení ps = spoj.připravit prohlášení(„SELECT i. *, J. * FROM Omega i, Zappa j WHERE i.name =? AND j.num =?“)) { // V připravovaném příkazu SQL je každý otazník zástupným symbolem // která musí být nahrazena hodnotou, kterou zadáte prostřednictvím vyvolání metody „set“. // Následující dvě volání metody nahradí dva zástupné symboly; první je // nahrazeno řetězcovou hodnotou a druhý celočíselnou hodnotou. ps.setString(1, „Chudák Yorick“); ps.setInt(2, 8008); // ResultSet, rs, vyjadřuje výsledek provedení příkazu SQL. // Pokaždé, když zavoláte rs.next (), interní ukazatel řádku nebo kurzor, // je posunut na další řádek výsledku. Kurzor je zpočátku // umístěn před prvním řádkem. Snaž se (ResultSet rs = ps.executeQuery()) { zatímco (rs.další()) { int numColumns = rs.getMetaData().getColumnCount(); pro (int i = 1; i <= numColumns; i++) { // Čísla sloupců začínají na 1. // Ve výsledkové sadě je také mnoho metod pro návrat // sloupec jako konkrétní typ. Viz dokumentace Sun // pro seznam platných převodů. Systém.ven.tisk(„SLOUPEC“ + i + " = " + rs.getObject(i)); } // pro } // zatímco } // Snaž se} // Snaž se
Pokud operace databáze selže, JDBC vyvolá SQLException
. Je obvykle velmi málo, co lze udělat, abyste se z takové chyby zotavili, kromě toho, že ji budete protokolovat co nejpodrobněji. Doporučuje se, aby byla SQLException přeložena do výjimky domén aplikace (nekontrolovaná), která nakonec vyústí v vrácení transakce a upozornění uživateli.
Příklad a transakce databáze:
booleovský autoCommitDefault = spoj.getAutoCommit();Snaž se { spoj.setAutoCommit(Nepravdivé); / * Zde provádíte příkazy proti conn transakčně * / spoj.spáchat();} úlovek (Vrhací E) { Snaž se { spoj.vrácení zpět(); } úlovek (Vrhací E) { záznamník.varovat(„Transakci nelze vrátit zpět“, E); } házet E;} Konečně { Snaž se { spoj.setAutoCommit(autoCommitDefault); } úlovek (Vrhací E) { záznamník.varovat(„Nelze obnovit nastavení AutoCommit“,E); }}
Příklad a Vyvolatelné prohlášení
(volání uložených procedur v databázi), viz Průvodce JDBC API dokumentace.
import java.sql.Connection;import java.sql.DriverManager;import Prohlášení java.sql;veřejnost třída Mydb1 { statický Tětiva URL = "jdbc: mysql: // localhost / mydb"; veřejnost statický prázdnota hlavní(Tětiva[] args) { Snaž se { Třída.forName(„com.mysql.jdbc.Driver“); Spojení spoj = DriverManager.getConnection(URL, "vykořenit", "vykořenit"); Tvrzení známka = spoj.createStatement(); Tětiva sql = "INSERT INTO emp1 VALUES ('pctb5361', 'kiril', 'john', 968666668)"; známka.executeUpdate(sql); Systém.ven.tisk("Vloženy záznamy do tabulky ..."); } úlovek (Výjimka E) { E.printStackTrace(); } }}
Ovladače JDBC
Ovladače JDBC jsou na straně klienta adaptéry (nainstalované na klientském počítači, nikoli na serveru), které převádějí požadavky z programů Java na protokol, kterému DBMS rozumí.
Typy
Komerční a bezplatné ovladače poskytují připojení k většině serverů relační databáze. Tyto ovladače spadají do jednoho z následujících typů:
- Typ 1 který volá nativní kód místně dostupného ovladače ODBC. (Poznámka: V JDBC 4.2 byl odstraněn most JDBC-ODBC[9])
- Typ 2 který volá nativní knihovnu dodavatele databáze na straně klienta. Tento kód pak mluví do databáze po síti.
- Typ 3, ovladač čisté Javy, který komunikuje se middlewarem na straně serveru, který pak mluví s databází.
- Typ 4, ovladač čisté javy, který používá nativní protokol databáze.
Všimněte si také typu zvaného an interní ovladač JDBC - ovladač vložený do JRE v databázích SQL s podporou Java. Používá se pro Uložené procedury Java. To se nehodí do výše uvedeného klasifikačního schématu, i když by to pravděpodobně připomínalo ovladač typu 2 nebo typu 4 (podle toho, zda je samotná databáze implementována v Javě nebo ne). Příkladem toho je ovladač KPRB (Kernel Program Bundled)[10]Dodávané s Oracle RDBMS. "jdbc: default: connection" nabízí relativně standardní způsob vytváření takového připojení (alespoň databáze Oracle a Apache Derby podporovat). V případě interního ovladače JDBC však klient JDBC ve skutečnosti běží jako součást databáze, ke které se přistupuje, a tak může přistupovat k datům spíše než prostřednictvím síťových protokolů.
Zdroje
- Věštec poskytuje a seznam některých ovladačů a prodejců JDBC
- Simba Technologies dodává SDK pro vytváření vlastních ovladačů JDBC pro jakýkoli vlastní / proprietární zdroj relačních dat
- Software CData dodává ovladače JDBC typu 4 pro různé aplikace, databáze a webová rozhraní API.[11]
- Ovladače RSSBus typu 4 JDBC pro aplikace, databáze a webové služby[12]
- DataDirect Technologies poskytuje komplexní sadu rychlých ovladačů JDBC typu 4 pro všechny hlavní databáze, které inzerují jako typ 5[13]
- Software IDS poskytuje ovladač JDBC typu 3 pro souběžný přístup ke všem hlavním databázím. Mezi podporované funkce patří ukládání výsledků do mezipaměti, šifrování SSL, vlastní zdroj dat, dbShield
- JDBaccess je Java persistence knihovna pro MySQL a Věštec který definuje hlavní operace přístupu do databáze ve snadno použitelném API nad JDBC
- JNetDirect poskytuje sadu vysoce výkonných ovladačů JDBC plně certifikovaných společností Sun J2EE.
- JDBCR4 je servisní program napsaný uživatelem Scott Klement povolit přístup k JDBC z RPG na IBM i.[14]
- HSQLDB je RDBMS s ovladačem JDBC a je k dispozici pod licencí BSD.
- SchemaCrawler[15] je open source API, které využívá JDBC a zpřístupňuje metadata databáze jako staré staré objekty Java (POJO)
Viz také
Reference
- ^ „Sun Ships JDK 1.1 - Javabeans Included“. www.sun.com. Sun Microsystems. 1997-02-19. Archivovány od originál dne 10.02.2008. Citováno 2010-02-15.
19. února 1997 - JDK 1.1 [...] je nyní k dispozici [...]. Toto vydání JDK zahrnuje: [...] Robustní nové funkce včetně JDBC pro připojení k databázi
- ^ Verze specifikace JDBC API: 4.0.
- ^ „Program Java Community Process (SM) - communityprocess - mrel“. jcp.org. Citováno 22. března 2018.
- ^ „JDBC 4.1“. docs.oracle.com. Citováno 22. března 2018.
- ^ „Program Java Community Process (SM) - communityprocess - mrel“. jcp.org. Citováno 22. března 2018.
- ^ „JDBC 4.2“. docs.oracle.com. Citováno 22. března 2018.
- ^ „Program Java Community Process (SM) - communityprocess - mrel“. jcp.org. Citováno 22. března 2018.
- ^ „java.sql (Java SE 9 a JDK 9)“. docs.oracle.com. Citováno 22. března 2018.
- ^ „Java JDBC API“. docs.oracle.com. Citováno 22. března 2018.
- ^ Greenwald, Rick; Stackowiak, Robert; Stern, Jonathan (1999). Oracle Essentials: Oracle Database 10g. Série Essentials (3. vyd.). Sebastopol, Kalifornie: O'Reilly Media, Inc. (publikováno 2004). p. 318. ISBN 9780596005856. Citováno 2016-11-03.
Ovladač JDBC v databázi (JDBC KPRB)[:] Kód Java používá pro přístup k SQL na stejném serveru verzi JDBC KPRB (Kernel Program Bundled).
- ^ „Ovladače JDBC - software CData“. Software CData. Citováno 22. března 2018.
- ^ „Ovladače JDBC - software CData“. Software CData. Citováno 22. března 2018.
- ^ „Nový ovladač JDBC typu 5 - připojení DataDirect“.
- ^ „Přístup k externím databázím z RPG pomocí JDBCR4 Meat of the Matter“. 28. června 2012. Citováno 12. dubna 2016.
- ^ Sualeh Fatehi. „SchemaCrawler“. SourceForge.
externí odkazy
- Průvodce JDBC API Tato dokumentace obsahuje příklady, kdy prostředky JDBC nejsou správně uzavřeny (polykání primárních výjimek a schopnost způsobit NullPointerExceptions) a má kód náchylný k Vložení SQL[Citace je zapotřebí ]
java.sql
API Javadoc dokumentacejavax.sql
Dokumentace API Javadoc- O / R Broker Rámec Scala JDBC
- SqlTool Otevřený zdroj, příkazový řádek, obecný obslužný program klienta JDBC. Funguje s jakoukoli databází podporující JDBC.
- Řetězce URL JDBC a související informace všech databází.