Programmēšana

Kas ir JDBC? Ievads Java datu bāzu savienojamībā

JDBC (Java Database Connectivity) ir Java API, kas pārvalda savienojumu izveidi ar datu bāzi, izsniedz vaicājumus un komandas un apstrādā no datu bāzes iegūtās rezultātu kopas. Izlaists kā daļa no JDK 1.1 1997. gadā, JDBC bija viens no pirmajiem komponentiem, kas izstrādāts Java noturības slānim.

JDBC sākotnēji tika iecerēts kā klienta API, kas ļauj Java klientam mijiedarboties ar datu avotu. Tas mainījās ar JDCB 2.0, kas ietvēra papildu paketi, kas atbalsta servera puses JDBC savienojumus. Katrā jaunajā JDBC laidienā kopš tā laika ir parādīti gan klienta pakotnes atjauninājumi (java.sql) un servera puses pakotni (javax.sql). JDBC 4.3, visjaunākā šī raksta versija, tika izlaista Java SE 9 ietvaros 2017. gada septembrī.

Šajā rakstā ir sniegts JDBC pārskats, kam seko praktisks ievads par JDBC API izmantošanu Java klienta savienošanai ar vieglu relāciju datu bāzi SQLite.

Kā darbojas JDBC

Izstrādāts kā alternatīva C bāzes ODBC (Open Database Connectivity) API, JDBC piedāvā programmēšanas līmeņa saskarni, kas apstrādā Java lietojumprogrammu mehāniku, kas sazinās ar datu bāzi vai RDBMS. JDBC saskarne sastāv no diviem slāņiem:

  1. JDBC API atbalsta saziņu starp Java lietojumprogrammu un JDBC pārvaldnieku.
  2. JDBC draiveris atbalsta saziņu starp JDBC pārvaldnieku un datu bāzes draiveri.

JDBC ir izplatīta API, ar kuru mijiedarbojas jūsu lietojumprogrammas kods. Zem tā ir JDBC saderīgs draiveris jūsu izmantotajai datu bāzei.

1. attēls ir JDBC arhitektūras pārskats Java noturības slānī.

JavaWorld /

JDBC izmantošana, lai izveidotu savienojumu ar datu bāzi

Viens no laimīgajiem Java ekosistēmas programmēšanas faktiem ir tas, ka jūs, iespējams, atradīsit stabilu JDBC datu bāzes savienotāju jebkurai izvēlētajai datu bāzei. Šajā apmācībā mēs izmantosim SQLite, lai iepazītu JDBC, galvenokārt tāpēc, ka to ir tik viegli izmantot.

Lai izveidotu savienojumu ar datu bāzi, izmantojot JDBC, ir jāveic šādas darbības:

  1. Instalējiet vai atrodiet datu bāzi, kurai vēlaties piekļūt.
  2. Iekļaujiet JDBC bibliotēku.
  3. Pārliecinieties, vai vajadzīgais JDBC draiveris atrodas jūsu klases ceļā.
  4. Izmantojiet JDBC bibliotēku, lai iegūtu savienojumu ar datu bāzi.
  5. Izmantojiet savienojumu, lai izdotu SQL komandas.
  6. Kad esat pabeidzis, aizveriet savienojumu.

Mēs kopā veiksim šīs darbības.

JDBC draivera atrašana

Lai atrastu draiveri datubāzei, kuru vēlaties izmantot, vienkārši veiciet tīmekļa meklēšanu savai datu bāzei un JDBC. Piemēram, ierakstot "mysql jdbc draiveris"parādīs MySQL draiveri. Es izaicinu jūs atrast ar Java saderīgu datu bāzi bez JDBC draivera!

1. solis. Lejupielādējiet un instalējiet SQLite

SQLite ir ļoti kompakta datu bāze. Tas nav paredzēts izmantošanai ražošanā, bet ir lieliska izvēle, lai ātri izmēģinātu lietas. SQLite izmanto failu kā funkcionālo datu bāzi, neprasot nekādus pakalpojumus vai dēmonu instalācijas.

Lai sāktu darbu ar šo demonstrāciju, turpiniet un lejupielādējiet SQLite paraugdatu bāzi. Izvelciet .db failu un saglabājiet to kaut kur, kuru neaizmirsīsit.

Šajā failā ir gan funkcionāla datubāze, gan shēmas paraugs un dati, kurus mēs varam izmantot.

SQL un JDBC

NoSQL pēdējās desmitgades laikā ir kļuvis populārs, taču relāciju datu bāzes joprojām ir visizplatītākais izmantoto datu krātuves veids. A relāciju datu bāze ir strukturēts krātuve, kas sastāv no tabulām ar kolonnām un rindām. SQL (strukturēta vaicājumu valoda) ir valodas dati, ko arhitekti izmanto, lai izveidotu, lasītu, atjauninātu un dzēstu jaunus ierakstus relāciju datu bāzē. JDBC ir adaptera slānis no Java līdz SQL: tas nodrošina Java izstrādātājiem kopēju saskarni, lai izveidotu savienojumu ar datu bāzi, izveidotu vaicājumus un komandas un pārvaldītu atbildes.

2. solis. Importējiet JDBC savā Java lietojumprogrammā

Mēs varētu veikt kodēšanu IDE, bet kodēšana tieši teksta redaktorā labāk parādīs JDBC vienkāršību. Lai sāktu, jums būs jābūt savai operētājsistēmai saderīgai JDK instalācijai.

Pieņemot, ka jums ir instalēti Java platformas izstrādātāja rīki, mēs varam sākt, izveidojot vienkāršu Java programmu. Teksta redaktorā ielīmējiet kodu, kas parādīts sarakstā 1. Zvaniet uz šo failu WhatIsJdbc.java.

Uzskaitīšana 1. Vienkārša Java programma

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

Tagad apkopojiet kodu, ievadot komandu: javac WhatIsJdbc.java. Kompilēšana izvadīs WhatIsJdbc.klase failu. Izpildiet šo failu no komandrindas ar zvanu: java WhatIsJdbc.

[Lai uzzinātu vairāk par mijiedarbību ar JDK komandrindā, skatiet sadaļu "Kas ir JDK? Ievads Java izstrādātāju komplektā".]

Kad jums ir pamata Java programma, varat iekļaut JDBC bibliotēkas. Vienkāršās Java programmas galvā ielīmējiet kodu no 2. saraksta.

Saraksts 2. JDBC imports

 importēt java.sql.Connection; importēt java.sql.DriverManager; importēt java.sql.SQLException; importēt java.sql.ResultSet; importēt java.sql.Statement; 

Katrs no šiem importiem nodrošina piekļuvi klasei, kas atvieglo standarta Java datu bāzes savienojumu:

  • Savienojums apzīmē savienojumu ar datu bāzi.
  • DriverManager iegūst savienojumu ar datu bāzi. (Vēl viena iespēja ir Datu avots, ko izmanto savienojuma apvienošanai. )
  • SQLEizņēmums apstrādā SQL kļūdas starp Java lietojumprogrammu un datu bāzi.
  • ResultSet un Paziņojums, apgalvojums modelēt datu rezultātu kopas un SQL priekšrakstus.

Drīz mēs redzēsim katru no šīm darbībām.

3. solis. Pievienojiet JDBC draiveri savam klases ceļam

Pēc tam savā klases ceļā pievienosiet SQLite draiveri. A JDBC vadītājs ir klase, kas ievieš JDBC API noteiktai datu bāzei.

Lejupielādējiet SQLite draiveri no GitHub. Noteikti iegūstiet jaunāko .jar failu un saglabājiet to kaut kur, ko atceraties.

Nākamreiz, kad izpildīsit Java programmu, tas tiks izvilkts .jar failu, izmantojot klases ceļu. Ir vairāki veidi, kā iestatīt klases ceļu. 3. saraksts parāda, kā to izdarīt, izmantojot komandrindas slēdzi.

Saraksts 3. SQLite draivera izpildīšana Java klases ceļā

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

Ievērojiet, ka klases ceļu esam iestatījuši norādīt uz draiveri un vietējais katalogs; šādā veidā Java joprojām atradīs mūsu klases failu.

4. solis. Iegūstiet datu bāzes savienojumu

Klases ceļā tagad ir pieejams vadītājs. Tagad nomainiet vienkāršo Java lietojumprogrammas failu, lai tas izskatās kā 4. saraksta programma.

Saraksts 4. JDBC savienojuma klases izmantošana, lai izveidotu savienojumu ar SQLite

 importēt java.sql.Connection; importēt java.sql.DriverManager; importēt java.sql.SQLException; importēt java.sql.ResultSet; importēt java.sql.Statement; klase WhatIsJdbc {public static void main (String [] args) {Savienojuma savienojums = null; mēģiniet {String url = "jdbc: sqlite: path-to-db / chinook / chinook.db"; conn = DriverManager.getConnection (url); System.out.println ("Saprati!"); } catch (SQLException e) {mest jaunu kļūdu ("Problēma", e); } visbeidzot {mēģiniet {if (conn! = null) {conn.close (); }} catch (SQLException ex) {System.out.println (ex.getMessage ()); }}}} 

Apkopojiet un izpildiet šo kodu. Pieņemot, ka viss norit labi, jūs saņemsit apstiprinošu ziņojumu.

Nav atrasts piemērots draiveris?

Ja esat saņēmis kļūdu, kas izskatās šādi:Jdbc: sqlite nav atrasts piemērots draiveris, "tad jums ir atkārtoti jāapmeklē klases ceļš un jāpārliecinās, vai tas norāda uz lejupielādēto draiveri. Neveiksmīgs draivera savienojums ir visizplatītākais klupšanas akmens iesācējiem, kuri izmanto JDBC. Nesviniet to, vienkārši salabojiet.

Tagad mēs esam gatavi dažām SQL komandām.

5. solis. Vaicājiet datu bāzē

Ar tiešā savienojuma objektu rokā mēs varam darīt kaut ko noderīgu, piemēram, vaicāt datu bāzē. 5. saraksts parāda, kā vaicāt SQLite, izmantojot JDBC Savienojums un Paziņojums, apgalvojums objektiem.

Saraksts 5. Datubāzes pieprasīšana ar JDBC

 importēt java.sql.Connection; importēt java.sql.DriverManager; importēt java.sql.SQLException; importēt java.sql.ResultSet; importēt java.sql.Statement; klase WhatIsJdbc {public static void main (String [] args) {Savienojuma savienojums = null; mēģiniet {String url = "jdbc: sqlite: path-to-db-file / chinook / chinook.db"; conn = DriverManager.getConnection (url); Izraksts stmt = null; Virknes vaicājums = "select * from albums"; mēģiniet {stmt = conn.createStatement (); ResultSet rs = stmt.executeQuery (vaicājums); while (rs.next ()) {String name = rs.getString ("nosaukums"); System.out.println (nosaukums); }} catch (SQLException e) {mest jaunu kļūdu ("Problēma", e); } beidzot {if (stmt! = null) {stmt.close (); }}} catch (SQLException e) {mest jaunu kļūdu ("Problēma", e); } visbeidzot {mēģiniet {if (conn! = null) {conn.close (); }} catch (SQLException ex) {System.out.println (ex.getMessage ()); }}}} 

5. sarakstā mēs izmantojam mūsu Savienojums objekts, lai iegūtu a Paziņojums, apgalvojums objekts: conn.createStatement (). Pēc tam mēs izmantojam šo objektu, lai izpildītu SQL vaicājumu: stmt.executeQuery (vaicājums).

The izpildītQuery komanda atgriež a ResultSet objektu, kuru pēc tam atkārtojam ar datiem kamēr (rs.next ()). Šajā piemērā jums vajadzētu redzēt albumu nosaukumus, par kuriem mēs esam vaicājuši, kā izvadi.

Ievērojiet, ka mēs arī pārtraucām savienojumu, izmantojot zvanu uz savienot aizvērt ().

Tīkla savienojumi ar JDBC

Datu bāzes savienojuma virkne 5. sarakstā ir paredzēta vietējam savienojumam: jdbc: sqlite: ceļš uz db-failu / chinook / chinook.db. Lai piekļūtu datu bāzei, izmantojot tīklu, savienojuma virknei būtu jāiekļauj tīkla URL un (parasti) akreditācijas dati, lai piekļūtu tai.

Darīt vairāk ar JDBC

Līdz šim mēs esam apskatījuši JDBC izmantošanas pamatus, lai izveidotu savienojumu ar datu bāzi un izdotu SQL komandas. Kamēr Paziņojumismiltis ResultSetLabi darbojas parastajos scenārijos, visticamāk, jums būs nepieciešamas papildu iespējas lielākām vai sarežģītākām lietojumprogrammām. Par laimi, JDBC bibliotēka turpina attīstīties, lai apmierinātu lielāko daļu datu bāzes piekļuves vajadzību.

Sagatavoti paziņojumi

Viens vienkāršs veids, kā palielināt koda elastību, ir aizstāt kodu Paziņojums, apgalvojums klase ar Sagatavots paziņojums, kā parādīts 6. sarakstā.

Uzskaitīšana 6. Izmantojot JDBC PreparedStatements

 String prepState = "ievietot albumu vērtībās (?,?);"; PreparedStatement prepState = connection.prepareStatement (sql); prepState.setString (1, "Sacelšanās"); prepState.setString (2, "Bobs Mārlijs un raudātāji"); int rowsAffected = sagatavotsStatement.executeUpdate (); 

Sagatavots paziņojums aizstāj Paziņojums, apgalvojumsgrūti kodētas vērtības ar jautājuma zīmēm (?). Izmantojot Sagatavots paziņojumss optimizē jūsu kodu atkārtotai izmantošanai: a Sagatavots paziņojums tiek sastādīts tikai vienu reizi, un pēc tam to var atkārtoti izmantot ar dažādiem parametriem. Palielinoties kodu bāzei, jūs vienkārši ievietojat paziņojumā jaunas vērtības, nevis uzlauzt pašu virknes objektu.

Partijas atjauninājumi

Ikreiz, kad lietojumprogrammai ir jāizdod vairāki atjauninājumi, to veikšana partijās var ievērojami uzlabot veiktspēju. Būtība partijas ir veikt vairākus atjauninājumus un apkopot tos kopā, pēc tam tos visus izdot vienlaikus. 7. sarakstā tiek izmantotas JDBC partijas metodes, lai veiktu vairāku pakešu atjaunināšanu Sagatavots paziņojumss.

Saraksts 7. Sērija ar PreparedStatement

 prepState.setString (1, "Sacelšanās"); prepState.setString (2, "Bobs Mārlijs un raudātāji"); sagatavotsStatement.addBatch (); prepState.setString (1, "Wildflowers"); prepState.setString (2, "Tom Petty and the Heartbreakers"); sagatavotsStatement.addBatch (); int [] rowsAffected = sagatavotsStatement.executeBatch (); 

JDBC darījumi

Darījumi relāciju datu bāzēs ļauj atjauninājumu kopu ietīt mijiedarbībā, kas vai nu izdodas, vai arī vispār neizdodas. Darījuma, izmantojot JDBC, izmantošanas pamati ir likt sistēmai pagriezties izslēgts automātiska saistību izpildīšana un pēc tam manuāli sakiet sistēmai, lai tā izdarītu, kad esat pabeidzis. Pēc noklusējuma automātiskā apņemšanās ir ieslēgts, kas nozīmē ikreiz, kad executeUpdate vai izpildītIevietot tiek palaists, komanda ir izpildīta.

8. saraksts parāda nelielu JDBC darījuma daļu.

Uzskaitījums 8. JDBC darījumi

 connection.setAutoCommit (nepatiesa); // Izmantojiet executeUpdate vairākas reizes connection.commit (); 

Kad connection.commit () ir sastopami, tiks mēģināti visi tajā ietītie atjauninājumi, un, ja kāds neizdosies, tie visi tiks atgriezti.

JDBC 4.3 ir daudz vairāk iespēju, kuras vērts izpētīt, tostarp izmantot CallableStatement uzglabātām procedūrām, izmantojot Datu avots objekti, lai uzlabotu lietojumprogrammas veiktspēju (it īpaši, izmantojot savienojumu kopēšanu), un JDBC ResultSet konvertēšana uz Java straumi.

Datu bāzes specifiskas funkcijas

Kaut arī katra ar JDBC saderīgā datu bāze piedāvā tās pašas pamatfunkcijas, lai izveidotu savienojumu un mijiedarbotos ar datu bāzi, izmantojot SQL, dažas datubāzes dara vairāk nekā citas. Kā piemēru Oracle DB piedāvā rezultātu kešatmiņu, kas nav nepieciešama JDBC specifikācijā. Lūk, piemērs:

 conn.prepareStatement ("select / * + result_cache * / * no darbiniekiem, kur darbinieka ID <: 1"); 

Šis piemērs ir ņemts no Oracle JDBC OCI draivera dokumentācijas.

Secinājums

JDBC ir viena no vecākajām Java API, kas nodrošina viegli lietojamu risinājumu vienai no Java programmu izstrādes pastāvīgajām vajadzībām. Zinot tikai dažus šajā rakstā demonstrētos JDBC zvanus, jūs sāksiet izmantot JDBC, lai izveidotu savienojumu ar praktiski jebkuru datu bāzi. Kad esat saņēmis šīs komandas, varat sākt izpētīt dažas sarežģītākas opcijas, kas ir iebūvētas JDBC.

Kaut arī JDBC ir pietiekams vienkāršākām lietojumprogrammām, lielākā daļa izstrādātāju galu galā meklēs Java Noturības API (JPA), lai izveidotu formālāku datu piekļuves slāni. JPA ir nepieciešams vairāk sākotnēja darba un sarežģītāka izpratne par lietojumprogrammu arhitektūru, taču tas nodrošina konsekventāku, izolētāku un precīzāk definētu datu piekļuves slāni. Lai uzzinātu vairāk par datu noturības slāņa izstrādi Java lietojumprogrammām, skatiet šī raksta pavadoni "Kas ir JPA? Ievads Java pastāvības API".

Šo stāstu "Kas ir JDBC? Ievads Java datu bāzu savienojamībā" sākotnēji publicēja JavaWorld.

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