Programavimas

Kas yra JDBC? Įvadas į „Java“ duomenų bazių ryšį

JDBC („Java Database Connectivity“) yra „Java“ API, kuri valdo prisijungimą prie duomenų bazės, išduoda užklausas ir komandas bei tvarko iš duomenų bazės gautus rezultatų rinkinius. 1997 m. Išleistas kaip JDK 1.1 dalis, JDBC buvo vienas iš pirmųjų komponentų, sukurtų „Java“ patvarumo sluoksniui.

Iš pradžių JDBC buvo sukurtas kaip kliento API, leidžiantis „Java“ klientui sąveikauti su duomenų šaltiniu. Tai pasikeitė su „JDCB 2.0“, į kurią įėjo pasirinktinis paketas, palaikantis serverio pusės „JDBC“ ryšius. Kiekviename naujame JDBC leidime nuo tada buvo atnaujinti kliento paketai (java.sql) ir serverio pusės paketą (javax.sql). JDBC 4.3, naujausia šio rašymo versija, buvo išleista kaip „Java SE 9“ dalis 2017 m. Rugsėjo mėn.

Šiame straipsnyje pateikiama JDBC apžvalga, po kurios pateikiama praktinė įvadas apie JDBC API naudojimą norint prijungti „Java“ klientą su „SQLite“ - lengva reliacine duomenų baze.

Kaip veikia JDBC

Sukurtas kaip alternatyva C pagrindu veikiančiai ODBC („Open Database Connectivity“) API, JDBC siūlo programavimo lygio sąsają, kuri valdo „Java“ programų, bendraujančių su duomenų baze ar RDBMS, mechaniką. JDBC sąsaja susideda iš dviejų sluoksnių:

  1. JDBC API palaiko ryšį tarp „Java“ programos ir JDBC tvarkyklės.
  2. JDBC tvarkyklė palaiko ryšį tarp JDBC tvarkyklės ir duomenų bazės tvarkyklės.

JDBC yra įprasta API, su kuria sąveikauja jūsų programos kodas. Žemiau yra JDBC suderinama tvarkyklė jūsų naudojamai duomenų bazei.

1 paveiksle pateikiama JDBC architektūros apžvalga „Java“ patvarumo sluoksnyje.

„JavaWorld“ /

JDBC naudojimas prisijungiant prie duomenų bazės

Vienas iš laimingiausių „Java“ ekosistemos programavimo faktų yra tas, kad greičiausiai rasite stabilią JDBC duomenų bazės jungtį bet kuriai pasirinktai duomenų bazei. Šioje pamokoje mes naudosime SQLite, norėdami pažinti JDBC, daugiausia todėl, kad juo naudotis taip paprasta.

Prisijungimo prie duomenų bazės su JDBC veiksmai yra šie:

  1. Įdiekite arba raskite duomenų bazę, prie kurios norite prisijungti.
  2. Įtraukite JDBC biblioteką.
  3. Įsitikinkite, kad jums reikalingas JDBC tvarkyklė yra jūsų klasės kelyje.
  4. Norėdami gauti ryšį su duomenų baze, naudokite JDBC biblioteką.
  5. Norėdami išleisti SQL komandas, naudokite ryšį.
  6. Užbaikite ryšį, kai baigsite.

Šiuos veiksmus atliksime kartu.

JDBC tvarkyklės radimas

Norėdami rasti norimos naudoti duomenų bazės tvarkyklę, tiesiog atlikite žiniatinklio paiešką savo duomenų bazėje ir JDBC. Pavyzdžiui, įvesdami „mysql jdbc tvarkyklė"sukurs tvarkyklę, skirtą" MySQL ". Aš metu iššūkį jums rasti su Java suderinamą duomenų bazę be JDBC tvarkyklės!

1 žingsnis. Atsisiųskite ir įdiekite SQLite

SQLite yra labai kompaktiška duomenų bazė. Jis nėra skirtas gamybai, tačiau yra puikus pasirinkimas norint greitai išbandyti dalykus. SQLite naudoja failą kaip savo funkcinę duomenų bazę, nereikalaudama jokių paslaugų ar „daemon“ diegimų.

Norėdami pradėti naudoti šią demonstracinę versiją, atsisiųskite „SQLite“ pavyzdžių duomenų bazę. Atsegkite .db failą ir išsaugokite jį kažkur, ko nepamiršite.

Šiame faile yra funkcinė failais pagrįsta duomenų bazė ir pavyzdinė schema bei duomenys, kuriuos galime naudoti.

SQL ir JDBC

„NoSQL“ per pastarąjį dešimtmetį išpopuliarėjo, tačiau reliacinės duomenų bazės išlieka dažniausias naudojamų duomenų parduotuvių tipas. A reliacinė duomenų bazė yra struktūrizuota saugykla, susidedanti iš lentelių su stulpeliais ir eilėmis. SQL („Structured Query Language“) yra kalbos duomenys, kuriuos architektai naudoja kurdami, skaitydami, atnaujindami ir ištrindami naujus įrašus reliacinėje duomenų bazėje. JDBC yra adapterio sluoksnis nuo „Java“ iki SQL: tai suteikia „Java“ kūrėjams bendrą sąsają prisijungti prie duomenų bazės, pateikti užklausas ir komandas bei valdyti atsakymus.

2 žingsnis. Importuokite JDBC į savo „Java“ programą

Galėtume koduoti IDE, tačiau kodavimas tiesiai į teksto rengyklę geriau parodys JDBC paprastumą. Norėdami pradėti, turite turėti suderinamą JDK diegimą savo operacinei sistemai.

Darant prielaidą, kad turite įdiegtus „Java“ platformos kūrėjo įrankius, galime pradėti nuo paprastos „Java“ programos sukūrimo. Savo teksto rengyklėje įklijuokite kodą, parodytą sąraše 1. Iškvieskite šį failą WhatIsJdbc.java.

Sąrašas 1. Paprasta „Java“ programa

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

Dabar sukompiliuokite kodą įvesdami komandą: javac WhatIsJdbc.java. Kompiliuojant bus išvestas WhatIsJdbc.class failą. Vykdykite šį failą iš komandinės eilutės su skambučiu: java WhatIsJdbc.

[Daugiau informacijos apie tai, kaip bendrauti su JDK komandinėje eilutėje, rasite „Kas yra JDK? Įvadas į„ Java Developer Kit “.]

Turėdami pagrindinę „Java“ programą, galite įtraukti JDBC bibliotekas. Įklijuokite kodą iš 2 sąrašo savo paprastos „Java“ programos galvutėje.

Sąrašas 2. JDBC importas

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

Kiekvienas iš šių importų suteikia prieigą prie klasės, kuri palengvina standartinį „Java“ duomenų bazės ryšį:

  • Ryšys reiškia ryšį su duomenų baze.
  • „DriverManager“ gauna ryšį su duomenų baze. (Kitas variantas yra Duomenų šaltinis, naudojamas jungčių kaupimui. )
  • SQLE išimtis tvarko SQL klaidas tarp „Java“ programos ir duomenų bazės.
  • Rezultato rinkinys ir Pareiškimas modeliuoti duomenų rezultatų rinkinius ir SQL sakinius.

Netrukus pamatysime kiekvieną iš jų.

3 žingsnis. Pridėkite JDBC tvarkyklę prie savo klasės kelio

Tada pridėsite SQLite tvarkyklę prie savo klasės kelio. A JDBC vairuotojas yra klasė, diegianti JDBC API konkrečiai duomenų bazei.

Atsisiųskite „SQLite“ tvarkyklę iš „GitHub“. Būtinai gaukite naujausią .jar failą ir saugokite jį kur atsiminsite.

Kitą kartą vykdydami „Java“ programą, tai ištrauksite .jar failą per classpath. Yra keli būdai nustatyti klasės kelią. 3 sąraše parodyta, kaip tai padaryti naudojant komandinės eilutės jungiklį.

Sąrašas 3. SQLite tvarkyklės vykdymas Java klasės kelyje

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

Atkreipkite dėmesį, kad mes nustatėme klasės kelią nukreipti į tvarkyklę ir vietinis katalogas; tokiu būdu „Java“ vis tiek ras mūsų klasės failą.

4 žingsnis. Gaukite duomenų bazės ryšį

Dabar klasės kelias turi prieigą prie vairuotojo. Dabar pakeiskite paprastą „Java“ programos failą, kad jis atrodytų kaip 4 sąraše esanti programa.

Sąrašas 4. JDBC ryšio klasės naudojimas prisijungiant prie SQLite

 importuoti java.sql.Connection; importuoti java.sql.DriverManager; importuoti java.sql.SQLException; importuoti java.sql.ResultSet; importuoti java.sql.Statement; klasė WhatIsJdbc {public static void main (String [] args) {Connection conn = null; pabandykite {String url = "jdbc: sqlite: path-to-db / chinook / chinook.db"; conn = „DriverManager.getConnection“ (URL); System.out.println ("Supratau!"); } pagauti (SQLException e) {thrown new Error ("Problema", e); } pagaliau {pabandykite {if (conn! = null) {conn.close (); }} gaudyti (SQLException ex) {System.out.println (ex.getMessage ()); }}}} 

Sudarykite ir vykdykite šį kodą. Darant prielaidą, kad viskas gerai, gausite patvirtinantį pranešimą.

Nerasta tinkamo vairuotojo?

Jei gavote klaidą, panašią į „Nerastas jdbc: sqlite tinkamas tvarkyklė", tada jūs turite iš naujo apsilankyti klasės kelyje ir įsitikinti, kad jis nukreipia į atsisiųstą tvarkyklę. Nepavykęs tvarkyklės ryšys yra dažniausiai pasitaikantis kliūtis pradedantiesiems, naudojantiems JDBC. Negalima jo prakaituoti, tiesiog pataisyti.

Dabar mes pasiruošę kai kurioms SQL komandoms.

5 žingsnis. Užklausa duomenų bazėje

Turėdami rankoje tiesioginio ryšio objektą, galime padaryti ką nors naudingo, pavyzdžiui, pateikti užklausą duomenų bazėje. 5 sąraše parodyta, kaip pateikti užklausą SQLite naudojant JDBC Ryšys ir Pareiškimas objektai.

Sąrašas 5. Duomenų bazės užklausa naudojant JDBC

 importuoti java.sql.Connection; importuoti java.sql.DriverManager; importuoti java.sql.SQLException; importuoti java.sql.ResultSet; importuoti java.sql.Statement; klasė WhatIsJdbc {public static void main (String [] args) {Connection conn = null; pabandykite {String url = "jdbc: sqlite: path-to-db-file / chinook / chinook.db"; conn = „DriverManager.getConnection“ (URL); Pareiškimas stmt = null; Eilutės užklausa = "select * from albums"; pabandykite {stmt = conn.createStatement (); ResultSet rs = stmt.executeQuery (užklausa); while (rs.next ()) {String name = rs.getString ("title"); System.out.println (vardas); }} gaudyti (SQLException e) {thrown new Error ("Problema", e); } pagaliau {if (stmt! = null) {stmt.close (); }}} pagauti (SQLException e) {thrown new Error ("Problema", e); } pagaliau {pabandykite {if (conn! = null) {conn.close (); }} gaudyti (SQLException ex) {System.out.println (ex.getMessage ()); }}}} 

5 sąraše mes naudojame mūsų Ryšys objektas gauti a Pareiškimas objektas: conn.createStatement (). Tada mes naudojame šį objektą SQL užklausai vykdyti: stmt.executeQuery (užklausa).

vykdytiQuery komanda grąžina a Rezultato rinkinys objektą, kurį tada naudojame kartodami duomenis o (rs. Next ()). Šiame pavyzdyje turėtumėte pamatyti albumų pavadinimus, dėl kurių klausėme, kaip išvestį.

Atkreipkite dėmesį, kad mes taip pat uždarėme ryšį per skambutį jungtis uždaryti ().

Tinklo ryšiai su JDBC

5 sąraše esanti duomenų bazės ryšio eilutė skirta vietiniam ryšiui: jdbc: sqlite: kelias į db-failą / chinook / chinook.db. Norint patekti į duomenų bazę per tinklą, į ryšio eilutę reikės įtraukti tinklo URL ir (paprastai) prieigos prie jo kredencialus.

Padarykite daugiau su JDBC

Iki šiol apžvelgėme JDBC naudojimo pagrindus prisijungiant prie duomenų bazės ir išduodant SQL komandas. Nors Pareiškimaismėlis Rezultato rinkinysGerai tinka esant įprastiems scenarijams, greičiausiai jums reikės papildomų parinkčių didesnėms ar sudėtingesnėms programoms. Laimei, JDBC biblioteka toliau tobulėja, kad patenkintų daugumą prieigos prie duomenų bazių poreikių.

Parengta pareiškimai

Vienas paprastas būdas padidinti kodo lankstumą yra pakeisti kodą Pareiškimas klasė su Parengta pareiškimas, kaip parodyta 6 sąraše.

Sąrašas 6. Naudojant JDBC PreparedStatements

 String prepState = "įterpti į albumų reikšmes (?,?);"; PreparedStatement prepState = connection.prepareStatement (sql); prepState.setString (1, „Sukilimas“); prepState.setString (2, „Bob Marley and Wailers“); int eilutėsAffected = parengtaStatement.executeUpdate (); 

Parengta pareiškimas pakeičia Pareiškimasužkoduotos reikšmės su klaustukais (?). Naudojant Parengta pareiškimass optimizuoja kodą pakartotiniam naudojimui: a Parengta pareiškimas yra sudarytas tik vieną kartą ir vėliau gali būti pakartotinai naudojamas su įvairiais parametrais. Augant kodų bazei, paprasčiausiai įterpkite naujas reikšmes į sakinį, užuot nulaužę patį eilutės objektą.

Paketiniai atnaujinimai

Kai programai reikia išleisti kelis naujinius, atlikus juos paketais, gali būti labai naudinga našumui. Esmė partija yra paimti kelis naujinius ir surinkti juos kartu, tada juos visus išleisti. 7 sąraše naudojami JDBC paketiniai metodai, kad būtų galima atnaujinti kelis paketus Parengta pareiškimass.

Sąrašas 7. Pakuotė su „PreparedStatement“

 prepState.setString (1, „Sukilimas“); prepState.setString (2, „Bob Marley and Wailers“); parengtaStatement.addBatch (); prepState.setString (1, "Laukinės gėlės"); prepState.setString (2, „Tom Petty and the Heartbreakers“); parengtaStatement.addBatch (); int [] rowsAffected = parengtaStatement.executeBatch (); 

JDBC sandoriai

Operacijos reliacinėse duomenų bazėse leidžia rinkti naujinių rinkinį į sąveiką, kuri arba pavyksta, arba iš viso nepavyksta. Operacijos per JDBC naudojimo pagrindai yra nurodyti sistemai pasisukti išjungtas automatiškai įsipareigoti, o tada rankiniu būdu nurodykite sistemai įvykdyti, kai baigsite. Pagal numatytuosius nustatymus automatinis įsipareigojimas yra ant, o tai reiškia, kai executeUpdate arba vykdytiIšterpti vykdoma, komanda vykdoma.

8 sąraše rodoma nedidelė JDBC operacijos dalis.

8. JDBC sandorių sąrašas

 connection.setAutoCommit (klaidinga); // Naudokite „executeUpdate“ kelis kartus connection.commit (); 

Kada connection.commit () aptikta, bus bandoma atlikti visus atnaujinimus, įvyniotus į vidų, o jei nepavyks, jie visi bus grąžinti atgal.

JDBC 4.3 yra daug daugiau funkcijų, kurias verta ištirti, įskaitant naudojimą „CallableStatement“ saugomoms procedūroms, naudojant Duomenų šaltinis objektai, skirti pagerinti programų našumą (ypač sujungimo jungtį) ir konvertuoti „JDBC ResultSet“ į „Java Stream“.

Duomenų bazės ypatybės

Nors kiekviena JDBC suderinama duomenų bazė siūlo tas pačias pagrindines funkcijas, kaip prisijungti ir sąveikauti su duomenų baze per SQL, kai kurios duomenų bazės daro daugiau nei kitos. Pavyzdžiui, „Oracle DB“ siūlo rezultatų talpyklą, kurios nereikalauja JDBC specifikacija. Štai pavyzdys:

 conn.prepareStatement ("select / * + result_cache * / * iš darbuotojų, kur darbuotojo ID <: 1"); 

Šis pavyzdys paimtas iš „Oracle“ JDBC OCI tvarkyklės dokumentų.

Išvada

„JDBC“ yra viena seniausių „Java“ API, teikianti lengvai naudojamą sprendimą, tenkinantį vieną iš daugiamečių „Java“ programų kūrimo poreikių. Žinodami tik keletą šiame straipsnyje parodytų JDBC skambučių, galėsite pradėti naudoti JDBC prisijungti prie praktiškai bet kurios duomenų bazės. Kai atmesite šias komandas, galėsite pradėti tyrinėti kai kurias sudėtingesnes parinktis, įdiegtas JDBC.

Nors JDBC pakanka paprastesnėms programoms, dauguma kūrėjų galų gale kreipsis į „Java Persistence API“ (JPA), kad sukurtų oficialesnį duomenų prieigos sluoksnį. JPA reikalauja daugiau išankstinio darbo ir sudėtingesnio programų architektūros supratimo, tačiau jis suteikia jums nuoseklesnį, izoliuotą ir gerai apibrėžtą prieigos prie duomenų sluoksnį. Žr. Šio straipsnio „Kas yra JPA? Įvadas į„ Java “patvarumo API“ pavadinimą, jei norite sužinoti daugiau apie „Java“ programų patvarumo sluoksnio kūrimą.

Šią istoriją „Kas yra JDBC? Įvadas į„ Java “duomenų bazių ryšį“ iš pradžių paskelbė „JavaWorld“.