Ohjelmointi

Mikä on JDBC? Johdanto Java-tietokantayhteyksiin

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:

  1. JDBC-sovellusliittymä tukee Java-sovelluksen ja JDBC-hallintaohjelman välistä viestintää.
  2. 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:

  1. Asenna tai etsi tietokanta, jota haluat käyttää.
  2. Sisällytä JDBC-kirjasto.
  3. Varmista, että tarvitsemasi JDBC-ohjain on luokkatietäsi.
  4. Käytä JDBC-kirjastoa yhteyden saamiseksi tietokantaan.
  5. Anna yhteyden avulla SQL-komentoja.
  6. 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 on Tietolähde, käytetään yhteyden yhdistämiseen. )
  • SQLEpoikkeus käsittelee SQL-virheet Java-sovelluksen ja tietokannan välillä.
  • ResultSet ja Lausunto 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 Lausunnots ja ResultSets 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 Lausuntokovakoodatut arvot kysymysmerkeillä (?). Käyttämällä Valmisteltu lausuntos 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 lausuntos.

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.