Programiranje

Kaj je JDBC? Uvod v povezljivost Java Database

JDBC (Java Database Connectivity) je Java API, ki upravlja povezovanje z bazo podatkov, izdajanje poizvedb in ukazov ter obdelavo naborov rezultatov, pridobljenih iz baze podatkov. JDBC, ki je bil izdan leta 1997 kot del JDK 1.1, je bil eden prvih komponent, razvitih za plast obstojnosti Java.

JDBC je bil prvotno zasnovan kot API na strani odjemalca, ki odjemalcu Java omogoča interakcijo z virom podatkov. To se je spremenilo z JDCB 2.0, ki je vključeval izbirni paket, ki podpira povezave JDBC na strani strežnika. Vsaka nova izdaja JDBC od takrat vsebuje posodobitve tako na odjemalskem paketu (java.sql) in strežniški paket (javax.sql). JDBC 4.3, najnovejša različica tega pisanja, je bila izdana kot del Java SE 9 septembra 2017.

Ta članek predstavlja pregled JDBC, ki mu sledi praktični uvod v uporabo API-ja JDBC za povezavo odjemalca Java z SQLite, lahkotno relacijsko bazo podatkov.

Kako deluje JDBC

JDBC, razvit kot alternativa API-ju ODBC (Open Database Connectivity) na osnovi C, ponuja programski vmesnik na ravni programske opreme, ki upravlja mehaniko Java-programov, ki komunicirajo z bazo podatkov ali RDBMS. Vmesnik JDBC je sestavljen iz dveh slojev:

  1. API JDBC podpira komunikacijo med aplikacijo Java in upraviteljem JDBC.
  2. Gonilnik JDBC podpira komunikacijo med upraviteljem JDBC in gonilnikom baze podatkov.

JDBC je pogost API, s katerim deluje koda vaše aplikacije. Pod tem je JDBC-združljiv gonilnik za bazo podatkov, ki jo uporabljate.

Slika 1 je arhitekturni pregled JDBC v sloju obstojnosti Java.

JavaWorld /

Uporaba JDBC za povezavo z bazo podatkov

Eno od srečnih dejstev programiranja v ekosistemu Java je, da boste verjetno našli stabilen konektor baze podatkov JDBC za katero koli bazo podatkov, ki jo izberete. V tej vadnici bomo uporabili SQLite za spoznavanje JDBC, predvsem zato, ker je tako enostaven za uporabo.

Koraki za povezavo z bazo podatkov z JDBC so naslednji:

  1. Namestite ali poiščite bazo podatkov, do katere želite dostopati.
  2. Vključite knjižnico JDBC.
  3. Prepričajte se, da je potreben gonilnik JDBC na vaši poti predavanj.
  4. Uporabite knjižnico JDBC za povezavo z bazo podatkov.
  5. Uporabite povezavo za izdajanje ukazov SQL.
  6. Ko končate, zaprite povezavo.

Skupaj bomo šli skozi te korake.

Iskanje gonilnika JDBC

Če želite najti gonilnik za bazo podatkov, ki jo želite uporabiti, preprosto poiščite spletno bazo podatkov in JDBC. Na primer, vnesite "gonilnik mysql jdbc"bo prikazal gonilnik za MySQL. Izzivam vas, da poiščete bazo podatkov, združljivo z Javo, brez gonilnika JDBC!

Korak 1. Prenesite in namestite SQLite

SQLite je zelo kompaktna baza podatkov. Ni namenjen proizvodni uporabi, je pa odlična izbira za hitro preizkušanje stvari. SQLite uporablja datoteko kot svojo funkcionalno bazo podatkov, ne da bi zahteval kakršne koli storitve ali namestitve demona.

Če želite začeti s to predstavitvijo, prenesite vzorec baze podatkov SQLite. Razpakirajte .db datoteko in jo shranite nekam, kjer ne boste pozabili.

Ta datoteka vsebuje tako funkcionalno zbirko podatkov na osnovi datotek kot tudi vzorčno shemo in podatke, ki jih lahko uporabimo.

SQL in JDBC

NoSQL je v zadnjem desetletju postal priljubljen, vendar so relacijske zbirke podatkov še vedno najpogostejša vrsta shranjevanja podatkov v uporabi. A relacijska baza podatkov je strukturirano repozitorij, sestavljen iz tabel s stolpci in vrsticami. SQL (jezik strukturiranih poizvedb) je jezik, ki ga arhitekti uporabljajo za ustvarjanje, branje, posodabljanje in brisanje novih zapisov v relacijski bazi podatkov. JDBC je vmesni sloj od Jave do SQL: razvijalcem Jave daje skupen vmesnik za povezovanje z bazo podatkov, izdajanje poizvedb in ukazov ter upravljanje odzivov.

Korak 2. Uvozite JDBC v svojo aplikacijo Java

Kodiranje bi lahko izvajali v IDE-ju, vendar bo kodiranje neposredno v urejevalniku besedil bolje pokazalo preprostost JDBC-ja. Za začetek boste morali imeti združljiv JDK za vaš operacijski sistem.

Ob predpostavki, da imate nameščena orodja za razvijalce platforme Java, lahko začnemo z ustvarjanjem preprostega programa Java. V urejevalnik besedil prilepite kodo, prikazano na seznamu 1. Pokličite to datoteko WhatIsJdbc.java.

Seznam 1. Preprost program Java

 razred WhatIsJdbc {public static void main (String args []) {System.out.println ("Hello JavaWorld"); }} 

Zdaj prevedite kodo z vnosom ukaza: javac WhatIsJdbc.java. Prevajanje bo prikazalo WhatIsJdbc.class mapa. Izvedite to datoteko iz ukazne vrstice s klicem: java WhatIsJdbc.

[Glejte "Kaj je JDK? Uvod v Java Developer Kit" za več informacij o interakciji z JDK v ukazni vrstici.]

Ko imate osnovni program Java, lahko vključite knjižnice JDBC. Prilepite kodo iz seznama 2 na čelu vašega preprostega programa Java.

Seznam 2. Uvoz JDBC

 uvoz java.sql.Connection; uvoz java.sql.DriverManager; uvoz java.sql.SQLException; uvoz java.sql.ResultSet; uvoz java.sql.Statement; 

Vsak od teh uvozov omogoča dostop do razreda, ki olajša standardno povezavo z bazo podatkov Java:

  • Povezava predstavlja povezavo z bazo podatkov.
  • DriverManager pridobi povezavo z bazo podatkov. (Druga možnost je Vir podatkov, ki se uporablja za združevanje povezav. )
  • SQLException obravnava napake SQL med aplikacijo Java in bazo podatkov.
  • ResultSet in Izjava modelirajte nabore rezultatov podatkov in stavke SQL.

Vsako od njih bomo kmalu videli v akciji.

Korak 3. V svojo učilno pot dodajte gonilnik JDBC

Nato boste v pot do razreda dodali gonilnik SQLite. A JDBC gonilnik je razred, ki izvaja API JDBC za določeno bazo podatkov.

Prenesite gonilnik SQLite iz GitHub. Prepričajte se, da ste prejeli najnovejše .jar datoteko in jo shranite nekam, kjer se boste spomnili

Ko boste naslednjič zagnali program Java, boste to potegnili .jar datoteko prek učilnice. Način poti lahko nastavite na več načinov. Seznam 3 prikazuje, kako to storiti s stikalom ukazne vrstice.

Seznam 3. Izvajanje gonilnika SQLite na poti Java

 java.exe -classpath /path-to-driver/sqlite-jdbc-3.23.1.jar :. WhatIsJdbc 

Upoštevajte, da smo pot razreda predali na voznika in lokalni imenik; na ta način bo Java še vedno našla našo datoteko razreda.

Korak 4. Pridobite povezavo z bazo podatkov

Učna pot ima zdaj dostop do gonilnika. Zdaj spremenite svojo preprosto aplikacijsko datoteko Java, da bo videti kot program iz seznama 4.

Seznam 4. Uporaba razreda povezave JDBC za povezavo z SQLite

 uvoz java.sql.Connection; uvoz java.sql.DriverManager; uvoz java.sql.SQLException; uvoz java.sql.ResultSet; uvoz java.sql.Statement; razred WhatIsJdbc {public static void main (String [] args) {Connection conn = null; poskusite {String url = "jdbc: sqlite: pot do db / chinook / chinook.db"; conn = DriverManager.getConnection (url); System.out.println ("Razumem!"); } catch (SQLException e) {throw new Error ("Problem", e); } končno {poskusite {if (conn! = null) {conn.close (); }} catch (SQLException ex) {System.out.println (ex.getMessage ()); }}}} 

Prevedite in izvedite to kodo. Če predpostavimo, da je vse v redu, boste prejeli potrditveno sporočilo.

Ni najden ustrezen voznik?

Če ste prejeli napako, ki je videti kot "Za jdbc: sqlite ni bilo mogoče najti ustreznega gonilnika, "potem morate znova obiskati pot do razreda in se prepričati, da kaže na gonilnik, ki ste ga prenesli. Neuspešna povezava gonilnika je najpogostejši kamen spoprijemanja za začetnike, ki uporabljajo JDBC. Ne potite se, samo popravite.

Zdaj smo pripravljeni na nekaj ukazov SQL.

Korak 5. Poizvedite bazo podatkov

Z objektom povezave v živo lahko naredimo nekaj koristnega, na primer poizvedbo po zbirki podatkov. Seznam 5 prikazuje, kako iskati SQLite z uporabo JDBC Povezava in Izjava predmetov.

Seznam 5. Poizvedovanje po zbirki podatkov z JDBC

 uvoz java.sql.Connection; uvoz java.sql.DriverManager; uvoz java.sql.SQLException; uvoz java.sql.ResultSet; uvoz java.sql.Statement; razred WhatIsJdbc {public static void main (String [] args) {Connection conn = null; poskusite {String url = "jdbc: sqlite: path-to-db-file / chinook / chinook.db"; conn = DriverManager.getConnection (url); Izjava stmt = null; String query = "select * iz albumov"; poskusite {stmt = conn.createStatement (); ResultSet rs = stmt.executeQuery (poizvedba); while (rs.next ()) {String name = rs.getString ("title"); System.out.println (ime); }} catch (SQLException e) {throw new Error ("Problem", e); } končno {if (stmt! = null) {stmt.close (); }}} catch (SQLException e) {throw new Error ("Problem", e); } končno {poskusite {if (conn! = null) {conn.close (); }} catch (SQLException ex) {System.out.println (ex.getMessage ()); }}}} 

V seznamu 5 uporabljamo našo Povezava predmet za pridobitev a Izjava objekt: conn.createStatement (). Ta objekt nato uporabimo za izvedbo poizvedbe SQL: stmt.executeQuery (poizvedba).

The executeQuery ukaz vrne a ResultSet objekt, s katerim nato pregledujemo podatke while (rs.next ()). V tem primeru bi morali kot izhod videti naslove albumov, za katere smo povprašali.

Upoštevajte, da smo povezavo prekinili tudi s klicem na conn.close ().

Omrežne povezave z JDBC

Niz povezave baze podatkov v seznamu 5 je za lokalno povezavo: jdbc: sqlite: pot do datoteke db / chinook / chinook.db. Za dostop do baze podatkov prek omrežja mora niz povezave vsebovati URL omrežja in (običajno) poverilnice za dostop do nje.

Narediti več z JDBC

Doslej smo obravnavali osnove uporabe JDBC za povezavo z bazo podatkov in izdajanje ukazov SQL. Medtem Izjaves in ResultSets dobro delujejo pri običajnih scenarijih, verjetno boste potrebovali dodatne možnosti za večje ali bolj zapletene programe. Na srečo se knjižnica JDBC še naprej razvija tako, da izpolnjuje večino potreb po dostopu do baz podatkov.

Pripravljene Izjave

Enostaven način za povečanje prilagodljivosti kode je zamenjava Izjava razred s PreparedStatement, kot je prikazano na seznamu 6.

Seznam 6. Uporaba JDBC PreparedStatements

 String prepState = "vstavi v vrednosti albumov (?,?);"; PreparedStatement prepState = connection.prepareStatement (sql); prepState.setString (1, "Uprising"); prepState.setString (2, "Bob Marley in Wailerji"); int rowAffected = PreparedStatement.executeUpdate (); 

PreparedStatement nadomešča Izjavatrdo kodirane vrednosti z vprašanji (?). Uporaba PreparedStatements optimizira kodo za ponovno uporabo: a PreparedStatement se prevede samo enkrat, nato pa ga je mogoče znova uporabiti z različnimi parametri. Ko vaša osnova kode raste, preprosto vstavite nove vrednosti v stavek, namesto da bi vdrli v objekt niza.

Serijske posodobitve

Kadarkoli ima aplikacija za izdajo več posodobitev, lahko njihovo izvajanje v serijah zelo koristi uspešnosti. Bistvo seriranje je sprejeti več posodobitev in jih zbrati skupaj, nato pa jih izdati naenkrat. Seznam 7 uporablja paketne metode JDBC za izvedbo paketne posodobitve več PreparedStatements.

Seznam 7. Združevanje s pripravljeno izjavo

 prepState.setString (1, "Uprising"); prepState.setString (2, "Bob Marley in Wailerji"); PrepaStatement.addBatch (); prepState.setString (1, "Wildflowers"); prepState.setString (2, "Tom Petty in Heartbreakers"); PrepaStatement.addBatch (); int [] rowAffected = PreparedStatement.executeBatch (); 

Transakcije JDBC

Transakcije v relacijskih zbirkah podatkov omogočajo, da se nabor posodobitev zavije v interakcijo, ki bodisi uspe ali popolnoma ne uspe. Osnove uporabe transakcije prek JDBC so povedati sistemu, naj se obrne izključeno samodejno zaveži in nato ročno povejte sistemu, naj se zaveže, ko končate. Privzeto je samodejna odobritev na, kar pomeni, kadar koli executeUpdate ali executeInsert se zažene, ukaz je prevzet.

Seznam 8 prikazuje majhen delček transakcije JDBC.

Seznam 8. Transakcije JDBC

 connection.setAutoCommit (false); // večkrat uporabimo executeUpdate connection.commit (); 

Kdaj connection.commit () se bodo poskušale vse posodobitve, zavite v notranjost, in če katera ne bo uspela, se bodo vse povrnile nazaj.

V JDBC 4.3 je veliko več funkcij, ki jih je vredno raziskati, vključno z uporabo CallableStatement za shranjene postopke z uporabo Vir podatkov predmeti za izboljšano zmogljivost aplikacij (zlasti prek združevanja povezav) in pretvorbo JDBC ResultSet v Java Stream.

Funkcije, značilne za zbirko podatkov

Čeprav vsaka zbirka podatkov, skladna z JDBC, ponuja enake osnovne funkcije za povezovanje in interakcijo z bazo podatkov prek SQL, nekatere baze podatkov naredijo več kot druge. Kot primer Oracle DB ponuja predpomnjenje rezultatov, ki ga specifikacija JDBC ne zahteva. Tu je primer:

 conn.prepareStatement ("select / * + predpomnilnik_rezultatov * / * od zaposlenih, kjer je id_zaposlenih <: 1"); 

Ta primer je vzet iz dokumentacije za Oraclov JDBC OCI Driver.

Zaključek

JDBC je eden najstarejših Java-ovih API-jev, ki ponuja enostavno uporabo za eno od večnih potreb razvoja aplikacij Java. Če poznate le nekaj klicev JDBC, prikazanih v tem članku, boste začeli uporabljati JDBC za povezovanje s skoraj katero koli bazo podatkov. Ko dobite te ukaze, lahko začnete raziskovati nekatere bolj izpopolnjene možnosti, ki so bile vgrajene v JDBC.

Čeprav JDBC zadostuje za enostavnejše programe, se večina razvijalcev sčasoma obrne na API za obstojnost Java (JPA), da razvije bolj formalno plast dostopa do podatkov. JPA zahteva več vnaprejšnjega dela in bolj izpopolnjeno razumevanje arhitekture aplikacij, vendar vam omogoča bolj dosledno, izolirano in natančno določeno plast dostopa do podatkov. Oglejte si spremljevalca k temu članku, "Kaj je JPA? Uvod v API za obstojnost Java", kjer boste našli več informacij o razvoju ravni trajnosti podatkov za vaše programe Java.

To zgodbo z naslovom "Kaj je JDBC? Uvod v povezljivost baz podatkov Java" je prvotno objavil JavaWorld.

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