JDBC (Java Database Connectivity) on Java-sovellusliittymä, joka hallitsee yhteyden muodostamista tietokantaan, kyselyjen ja komentojen lähettämistä sekä tietokannasta saatujen tulosjoukkojen käsittelyä. Julkaistu osana JDK 1.1: tä vuonna 1997, JDBC oli yksi ensimmäisistä komponenteista, jotka kehitettiin Java-pysyvyyskerrokselle.
JDBC suunniteltiin alun perin asiakaspuolen API: ksi, mikä mahdollisti Java-asiakkaan vuorovaikutuksessa tietolähteen kanssa. Tämä muuttui JDCB 2.0: lla, joka sisälsi valinnaisen paketin, joka tukee palvelinpuolen JDBC-yhteyksiä. Jokaisessa uudessa JDBC-julkaisussa on päivityksiä sekä asiakaspuolen pakettiin (java.sql
) ja palvelinpuolen paketti (javax.sql
). JDBC 4.3, tämän kirjoituksen uusin versio, julkaistiin osana Java SE 9: tä syyskuussa 2017.
Tässä artikkelissa on yleiskatsaus JDBC: stä, jota seuraa käytännön esittely JDBC-sovellusliittymän käytöstä Java-asiakkaan yhdistämiseen SQLite-sovellukseen, joka on kevyt relaatiotietokanta.
Kuinka JDBC toimii
Kehitetty vaihtoehtona C-pohjaiselle ODBC (Open Database Connectivity) -sovellusliittymälle, JDBC tarjoaa ohjelmointitason käyttöliittymän, joka käsittelee tietokannan tai RDBMS: n kanssa kommunikoivien Java-sovellusten mekaniikkaa. JDBC-liitäntä koostuu kahdesta kerroksesta:
- JDBC-sovellusliittymä tukee Java-sovelluksen ja JDBC-hallintaohjelman välistä viestintää.
- JDBC-ohjain tukee tiedonsiirtoa JDBC-hallintaohjelman ja tietokanta-ohjaimen välillä.
JDBC on yleinen sovellusliittymä, jonka kanssa sovelluskoodisi on vuorovaikutuksessa. Sen alla on käyttämäsi tietokannan JDBC-yhteensopiva ohjain.
Kuva 1 on arkkitehtuurinen yleiskatsaus JDBC: stä Java-pysyvyyskerroksessa.
JavaWorld /Yhteyden muodostaminen tietokantaan JDBC: n avulla
Yksi Java-ekosysteemin ohjelmoinnin onnekkaista tosiseikoista on, että löydät todennäköisesti vakaan JDBC-tietokantaliittimen valitsemallesi tietokannalle. Tässä opetusohjelmassa käytämme SQLiteä tutustumalla JDBC: hen pääasiassa siksi, että sitä on niin helppo käyttää.
Vaiheet yhteyden muodostamiseksi tietokantaan JDBC: n kanssa ovat seuraavat:
- Asenna tai etsi tietokanta, jota haluat käyttää.
- Sisällytä JDBC-kirjasto.
- Varmista, että tarvitsemasi JDBC-ohjain on luokkatietäsi.
- Käytä JDBC-kirjastoa yhteyden saamiseksi tietokantaan.
- Anna yhteyden avulla SQL-komentoja.
- Sulje yhteys, kun olet valmis.
Käymme läpi nämä vaiheet yhdessä.
JDBC-ohjaimen etsiminen
Löydät ohjaimen käytettävälle tietokannalle yksinkertaisesti tekemällä verkkohaku tietokannallesi ja JDBC: lle. Esimerkiksi kirjoittamalla "mysql jdbc -ohjain
"tuo käyttöön ohjaimen MySQL: lle. Haastan sinut löytämään Java-yhteensopivan tietokannan ilman JDBC-ohjainta!
Vaihe 1. Lataa ja asenna SQLite
SQLite on erittäin kompakti tietokanta. Sitä ei ole tarkoitettu tuotantokäyttöön, mutta se on loistava valinta kokeilla asioita nopeasti. SQLite käyttää tiedostoa toiminnallisena tietokantana tarvitsematta palvelu- tai daemon-asennuksia.
Aloita tämän esittelyn aloittaminen lataamalla SQLite-näytetietokanta. Pura .db
tiedosto ja tallenna se jonnekin, jota et unohda.
Tämä tiedosto sisältää sekä toimivan tiedostopohjaisen tietokannan että näytemallin ja tietoja, joita voimme käyttää.
SQL ja JDBC
NoSQL on kasvanut suosituksi viimeisen vuosikymmenen aikana, mutta relaatiotietokannat ovat edelleen yleisin käytössä oleva tietokantatyyppi. A relaatiotietokanta on jäsennelty arkisto, joka koostuu sarakkeista ja riveistä. SQL (Structured Query Language) on kielidataa, jota arkkitehdit käyttävät esimerkiksi luoda, lukea, päivittää ja poistaa uusia tietueita relaatiotietokantaan. JDBC on adapterikerros Java: sta SQL: iin: se antaa Java-kehittäjille yhteisen käyttöliittymän yhteyden muodostamiseen tietokantaan, kyselyjen ja komentojen lähettämiseen ja vastausten hallintaan.
Vaihe 2. Tuo JDBC Java-sovellukseesi
Voisimme tehdä koodauksen IDE: ssä, mutta koodaus suoraan tekstieditorissa osoittaa paremmin JDBC: n yksinkertaisuuden. Aluksi sinulla on oltava yhteensopiva JDK-asennus käyttöjärjestelmääsi varten.
Jos olet asentanut Java-alustan kehittäjätyökalut, voimme aloittaa luomalla yksinkertaisen Java-ohjelman. Liitä tekstieditorissa koodi, joka näkyy luettelossa 1. Kutsu tätä tiedostoa WhatIsJdbc.java
.
Luettelo 1. Yksinkertainen Java-ohjelma
luokka WhatIsJdbc {public static void main (String args []) {System.out.println ("Hello JavaWorld"); }}
Käännä nyt koodi kirjoittamalla komento: javac WhatIsJdbc.java
. Käännös tuottaa WhatIsJdbc.luokka
tiedosto. Suorita tämä tiedosto komentoriviltä puhelun kanssa: java WhatIsJdbc
.
[Katso lisätietoja JDK: n käytöstä komentorivillä kohdasta "Mikä on JDK? Johdatus Java-kehityspakettiin".]
Kun sinulla on Java-perusohjelma, voit sisällyttää JDBC-kirjastot. Liitä koodi Lista 2: sta yksinkertaisen Java-ohjelman kärkeen.
Luettelo 2. JDBC-tuonti
tuo java.sql.Connection; tuo java.sql.DriverManager; tuo java.sql.SQLException; tuo java.sql.ResultSet; tuo java.sql.Statement;
Jokainen näistä tuonnista tarjoaa pääsyn luokkaan, joka helpottaa tavallista Java-tietokantayhteyttä:
Yhteys
edustaa yhteyttä tietokantaan.DriverManager
saa yhteyden tietokantaan. (Toinen vaihtoehto onTietolähde
, käytetään yhteyden yhdistämiseen. )SQLEpoikkeus
käsittelee SQL-virheet Java-sovelluksen ja tietokannan välillä.ResultSet
jaLausunto
mallintaa datatulosjoukot ja SQL-käskyt.
Näemme nämä kaikki toiminnassa pian.
Vaihe 3. Lisää JDBC-ohjain luokkatiedeesi
Seuraavaksi lisäät SQLite-ohjaimen luokkatielle. A JDBC-ohjain on luokka, joka toteuttaa JDBC-sovellusliittymän tietylle tietokannalle.
Lataa SQLite-ohjain GitHubista. Muista saada uusin .jar
tiedosto ja tallenna se muualle.
Seuraavan kerran, kun suoritat Java-ohjelman, vedät sen .jar
tiedosto luokan polun kautta. On olemassa useita tapoja asettaa luokkatie. Listaus 3 näyttää, miten se tehdään komentorivikytkimellä.
Listaus 3. SQLite-ohjaimen suorittaminen Java-luokkaradalla
java.exe -classpath /path-to-driver/sqlite-jdbc-3.23.1.jar :. Mikä on jdbc
Huomaa, että olemme asettaneet luokan polun osoittamaan ohjainta ja paikallinen hakemisto; tällä tavalla Java löytää edelleen luokkatiedostomme.
Vaihe 4. Hanki tietokantayhteys
Luokkatie voi nyt käyttää ohjainta. Muuta nyt yksinkertainen Java-sovellustiedostosi näyttämään Listing 4: n ohjelmalta.
Luettelo 4. JDBC-yhteysluokan käyttäminen yhteyden muodostamiseen SQLite-palveluun
tuo java.sql.Connection; tuo java.sql.DriverManager; tuo java.sql.SQLException; tuo java.sql.ResultSet; tuo java.sql.Statement; luokka WhatIsJdbc {public static void main (String [] args) {Connection conn = null; kokeile {String url = "jdbc: sqlite: polku-db / chinook / chinook.db"; conn = DriverManager.getConnection (url); System.out.println ("Selvä!"); } catch (SQLException e) {heitä uusi virhe ("Ongelma", e); } lopuksi {kokeile {if (conn! = null) {conn.close (); }} catch (SQLException ex) {System.out.println (ex.getMessage ()); }}}}
Käännä ja suorita tämä koodi. Olettaen, että kaikki menee hyvin, saat vahvistavan viestin.
Sopivaa ohjainta ei löytynyt?
Jos olet saanut virheen, joka näyttääJdbc: sqlite: lle ei löytynyt sopivaa ohjainta
, "sinun on sitten palattava luokkapolkuun ja varmistettava, että se osoittaa lataamaasi ohjainta. Epäonnistunut ohjainyhteys on yleisin kompastuskivi aloittelijoille, jotka käyttävät JDBC: tä. Älä hiki sitä, vaan korjaa se.
Nyt olemme valmiita joihinkin SQL-komentoihin.
Vaihe 5. Kysele tietokantaa
Live-yhteysobjektin ollessa kädessä voimme tehdä jotain hyödyllistä, kuten kysyä tietokannasta. Listaus 5 näyttää kuinka SQLite-kysely tehdään JDBC: n avulla Yhteys
ja Lausunto
esineitä.
Listaus 5. Tietokannan kysely JDBC: llä
tuo java.sql.Connection; tuo java.sql.DriverManager; tuo java.sql.SQLException; tuo java.sql.ResultSet; tuo java.sql.Statement; luokka WhatIsJdbc {public static void main (String [] args) {Connection conn = null; kokeile {String url = "jdbc: sqlite: polku-db-tiedostoon / chinook / chinook.db"; conn = DriverManager.getConnection (url); Lausunto stmt = null; Merkkijonokysely = "valitse * albumeista"; kokeile {stmt = conn.createStatement (); ResultSet rs = stmt.executeQuery (kysely); while (rs.next ()) {String name = rs.getString ("title"); System.out.println (nimi); }} catch (SQLException e) {heitä uusi virhe ("Ongelma", e); } lopuksi {if (stmt! = null) {stmt.close (); }}} catch (SQLException e) {heitä uusi virhe ("Ongelma", e); } lopuksi {kokeile {if (conn! = null) {conn.close (); }} catch (SQLException ex) {System.out.println (ex.getMessage ()); }}}}
Luettelossa 5 käytämme Yhteys
tavoite saada a Lausunto
esine: conn.createStatement ()
. Sitten suoritamme tämän objektin SQL-kyselyn suorittamiseen: stmt.executeQuery (kysely)
.
executeQuery
komento palauttaa a ResultSet
objekti, jota käytämme sitten iteroimaan tiedot kun (rs.sext ())
. Tässä esimerkissä sinun pitäisi nähdä albumien otsikot, joista olemme kysyneet.
Huomaa, että olemme myös sulkeneet yhteyden puhelun kautta yhteys sulje ()
.
Verkkoyhteydet JDBC: n kanssa
Luettelon 5 tietokantayhteysmerkkijono on paikallista yhteyttä varten: jdbc: sqlite: polku db-tiedostoon / chinook / chinook.db
. Tietokantaan pääsemiseksi verkon kautta yhteysmerkkijonon on sisällettävä verkko-URL ja (yleensä) tunnistetiedot sen käyttämiseksi.
Tehdä enemmän JDBC: n kanssa
Toistaiseksi olemme käsitelleet JDBC: n käytön perusteet yhteyden muodostamiseen tietokantaan ja SQL-komentojen antamiseen. Sillä aikaa Lausunnot
s ja ResultSet
s toimivat hyvin tavallisissa tilanteissa, tarvitset todennäköisesti lisävaihtoehtoja suuremmille tai monimutkaisemmille sovelluksille. Onneksi JDBC-kirjasto kehittyy jatkuvasti vastaamaan suurinta osaa tietokannan käyttövaatimuksista.
Valmistellut lausunnot
Yksi helppo tapa lisätä koodisi joustavuutta on korvata koodi Lausunto
luokan kanssa Valmisteltu lausunto
, kuten luettelossa 6 on esitetty.
Listaus 6. JDBC PreparedStatements -sovelluksen käyttö
String prepState = "lisää albumeihin arvot (?,?);"; PreparedStatement prepState = connection.prepareStatement (sql); prepState.setString (1, "kansannousu"); prepState.setString (2, "Bob Marley and the Wailers"); int rowsAffected = readyStatement.executeUpdate ();
Valmisteltu lausunto
korvaa Lausunto
kovakoodatut arvot kysymysmerkeillä (?
). Käyttämällä Valmisteltu lausunto
s optimoi koodisi uudelleenkäyttöä varten: a Valmisteltu lausunto
on koottu vain kerran ja voidaan sitten käyttää uudelleen useilla parametreilla. Kun koodikanta kasvaa, lisäät yksinkertaisesti uusia arvoja käskyyn sen sijaan, että hakkeroit itse merkkijono-objektin.
Eräpäivitykset
Aina kun sovelluksella on useita päivityksiä, niiden tekeminen erissä voi hyödyttää suuresti suorituskykyä. Ydin panos on ottaa useita päivityksiä ja kerätä ne yhdessä, sitten antaa ne kaikki kerralla. Listaus 7 käyttää JDBC: n erätapoja useiden eräpäivityksen suorittamiseen Valmisteltu lausunto
s.
Listaus 7. Erä PreparedStatementilla
prepState.setString (1, "kansannousu"); prepState.setString (2, "Bob Marley and the Wailers"); ettevalmistettuStatement.addBatch (); prepState.setString (1, "Wildflowers"); prepState.setString (2, "Tom Petty ja sydänsärkijät"); ettevalmistettuStatement.addBatch (); int [] rowsAffected = readyStatement.executeBatch ();
JDBC-tapahtumat
Tapahtumat relaatiotietokannoissa mahdollistavat päivitysten käärimisen vuorovaikutukseen, joka joko onnistuu tai epäonnistuu kokonaan. JDBC: n kautta tapahtuvan tapahtuman käytön perusteet ovat käskeä järjestelmää kääntymään vinossa automaattinen sitoutuminen ja käske sitten järjestelmän manuaalisesti sitoutumaan, kun olet valmis. Oletuksena automaattinen sitoutuminen on päällä, mikä tarkoittaa aina executeUpdate
tai suoritaLisää
on suoritettu, komento on sitoutunut.
Listaus 8 näyttää pienen osan JDBC-tapahtumasta.
Listaus 8. JDBC-tapahtumat
connection.setAutoCommit (väärä); // Käytä executeUpdate useita kertoja connection.commit ();
Kun connection.commit ()
on havaittu, kaikkia sisälle käärittyjä päivityksiä yritetään, ja jos jokin epäonnistuu, ne kaikki palautetaan.
JDBC 4.3: ssa on paljon muita ominaisuuksia, jotka kannattaa tutkia, mukaan lukien käyttö Soitettava lausunto
tallennetuille menettelyille käyttämällä Tietolähde
objekteja sovellusten suorituskyvyn parantamiseksi (erityisesti yhteyden yhdistämisen kautta) ja JDBC ResultSetin muuntamiseksi Java Streamiksi.
Tietokantakohtaiset ominaisuudet
Vaikka jokaisessa JDBC-yhteensopivassa tietokannassa on samat ominaisuudet yhteyden muodostamiseksi ja vuorovaikutukseen tietokannan kanssa SQL: n kautta, jotkut tietokannat tekevät enemmän kuin toiset. Esimerkiksi Oracle DB tarjoaa tulosvälimuistin, jota JDBC-määritys ei vaadi. Tässä on esimerkki:
conn.prepareStatement ("select / * + result_cache * / * työntekijöiltä, joissa työntekijän tunnus <: 1");
Tämä esimerkki on otettu Oraclen JDBC OCI -ohjaimen dokumentaatiosta.
Johtopäätös
JDBC on yksi Java: n vanhimmista sovellusliittymistä, joka tarjoaa helppokäyttöisen ratkaisun johonkin Java-sovelluskehityksen monivuotisista tarpeista. Kun tiedät vain muutaman tässä artikkelissa esitetyn JDBC-puhelun, pääset aloittamaan JDBC: n käytön muodostaaksesi yhteyden mihin tahansa tietokantaan. Kun olet saanut nämä komennot alas, voit alkaa tutkia joitain kehittyneempiä vaihtoehtoja, jotka on rakennettu JDBC: hen.
Vaikka JDBC riittää yksinkertaisempiin sovelluksiin, useimmat kehittäjät etsivät lopulta Java Persistence -sovellusliittymää (JPA) muodollisemman tiedonkerroksen kehittämiseksi. JPA vaatii enemmän etukäteen tehtävää työtä ja hienostuneempaa ymmärrystä sovellusarkkitehtuurista, mutta se tuo sinulle entistä johdonmukaisemman, eristetyn ja tarkasti määritellyn tiedonsiirtokerroksen. Katso tämän artikkelin "Mikä on JPA? Johdanto Java Persistence -sovellusliittymään" -oppaasta saadaksesi lisätietoja Java-sovellusten pysyvyyskerroksen kehittämisestä.
Tämän tarinan "Mikä on JDBC? Johdatus Java-tietokannan liitettävyyteen" julkaisi alun perin JavaWorld.