jdbc batch processing
Ta vadnica nudi popolno razumevanje paketne obdelave JDBC in shranjenega postopka Java s primeri Jave:
V Obravnava izjem JDBC vadnica Serija vadnic JDBC , smo se naučili načinov za obvladovanje izjem SQL s pomočjo programov.
V tej vadnici bomo obravnavali metode za paketno obdelavo v Javi z gonilnikom JDBC. Spoznali bomo tudi, kako ustvariti shranjene postopke in jih poklicati iz programa Java.
Začnimo z razumevanjem šaržne obdelave in njenih prednosti.
Kaj se boste naučili:
JDBC paketna obdelava
To je postopek izvajanja več stavkov SQL v eni transakciji. Ta postopek zmanjša čas komunikacije in poveča zmogljivost. Veliko olajša obdelavo velike količine podatkov.
Prednosti serijske obdelave
Cilj paketne obdelave je izboljšati zmogljivost in doslednost podatkov.
Izvedba
Razmislite o scenariju, ko je treba v tabelo iz programa JAVA dodati več (recimo 5) vnosov. Preprost pristop bo odpiranje povezave z bazo podatkov, pisanje poizvedb INSERT in izvajanje vsake poizvedbe z uporabo Statement ali PreparedStatement.
Ta pristop bo povečal omrežne izlete v bazo podatkov in posledično privedel do slabe učinkovitosti. S paketno obdelavo lahko to operacijo izvedemo v enem klicu.
Skladnost podatkov
V nekaterih primerih moramo podatke vstaviti / posodobiti v več tabel. To bo privedlo do medsebojno povezane transakcije, pri kateri je pomembno zaporedje vstavljenih ali posodobljenih poizvedb. Vse napake, ki se pojavijo med izvajanjem, bi povzročile vrnitev podatkov, vstavljenih s prejšnjimi poizvedbami, če sploh.
Primer:
# 1) Tabela ‘EMPLOYEE_DETAILS’ ima 3 stolpce: ID , Ime , in Vloga zaposlenega.
statement.execute('INSERT INTO EMPLOYEE_DETAILS(ID, NAME, ROLE) ' + 'VALUES ('1','EMPLOYEE_NAME1','ROLE1')');
#two) Tabela ‘EMPLOYEE_ADDRESS’ ima 2 stolpca: ID EMP in Naslov
statement.execute('INSERT INTO EMPLOYEE_ADDRESS( EMP_ID, ADDRESS) ' + 'VALUES ('1','ADDRESS1')');
V zgornjem primeru se lahko pojavi težava, ko se prvi stavek uspešno izvede, drugi stavek pa ne uspe. V tem primeru ni povratka podatkov, vstavljenih s prvo izjavo. To vodi do neskladnosti podatkov.
Doslednost podatkov lahko dosežemo tako, da na koncu izvedemo transakcijo ali izvedemo vračilo v primeru kakršnih koli izjem. Da pa bi to dosegli, je treba DB vsakič večkrat zadeti za vsako izjavo.
Po drugi strani pa se bodo pri paketni obdelavi podatki prevzeli šele, ko se bodo vse poizvedbe znotraj paketa uspešno izvedle. V nasprotnem primeru ne bo.
Kako izvesti serijsko obdelavo
Paketno obdelavo lahko izvedemo z uporabo metod addbatch () in executeBatch (), ki sta na voljo v razredih Statement in PreparedStatement.
V tej vadnici so vsi programi napisani v Javi. Uporabili smo različico Java 8 in Oracle DB.
=> Kliknite tukaj za prenos programske opreme Oracle
=> Kliknite tukaj, da prenesete različico Java 8
V naslednjem primeru bomo videli, kako natančno opraviti serijsko obdelavo. Ima postopek namestitve Jave po korakih.
Podatki v tabeli ZAPOSLENI pred vstavljanjem podatkov:
kje najdem svoj omrežni varnostni ključ
Java program
package com.STH.JDBC; import java.sql.BatchUpdateException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ExecuteBatch_Example { public static void main(String() args) throws ClassNotFoundException, SQLException { //Inserting the data in EMPLOYEE Table using the following query String insert_query1 = 'insert into employee values(?,?,?)'; Class.forName('oracle.jdbc.driver.OracleDriver'); Try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query1); //Setting values for the 1st person in EMPLOYEE Table pstatemnt1.setInt(1,10001); pstatemnt1.setString(2, 'Bush'); pstatemnt1.setString(3, 'William '); //Adding the 1st insert query into batch pstatemnt1.addBatch(); //Setting values for the 2nd person in EMPLOYEE Table pstatemnt1.setInt(1,10002); pstatemnt1.setString(2, “Bush'); pstatemnt1.setString(3, 'George'); //Adding the 2nd insert query into batch pstatemnt1.addBatch(); //Setting values for the 3rd person in EMPLOYEE Table pstatemnt1.setInt(1,10003); pstatemnt1.setString(2, 'Bond'); pstatemnt1.setString(3, 'James'); //Adding the 3rd insert query into batch pstatemnt1.addBatch(); //Executing the executeBatch method int No_of_Afffected_Rows()= pstatemnt1.executeBatch(); //After inserting the data, displaying no. of rows affected System.out.println('No of rows affected = ' +No_of_Afffected_Rows.length);} catch (SQLException e) { e.printStackTrace();} } }
IZHOD:
Podatki v tabeli ZAPOSLENI po vstavitvi podatkov:
Pojasnilo:
V zgornji program smo z enim klicem v paketni operaciji vstavili podatke o 3 zaposlenih.
- Ustvarite eno poizvedbo za vstavljanje, da posredujete vrednosti stolpcev.
- Odprite povezavo in z objektom povezave ustvarite objekt readyStatement in pokličite metodo prepaStatement.
- Nato nastavite vrednosti za 1stzaposlenega z uporabo metod setXXX in pokličite metodo addBatch (), da dodate novo vrstico v paket.
- Takole dodajte vrednosti za 2ndin 3rdzaposlenih. Po dodajanju poizvedb v metodo addBatch () bi morali poklicati metodo executeBatch () z uporabo pripravljenega objekta StateStatement.
- metoda executeBatch () vstavi podatke o treh zaposlenih v enem klicu.
- Preverite tabelo EMPLOYEE, ali so bili podatki pravilno vstavljeni ali ne.
Java shranjeni postopki
Shranjeni postopek je skupina stavkov SQL, ki tvorijo eno enoto in izvajajo določeno nalogo. Uporabili jih bodo za izvedbo nabora operacij ali vprašanj za izvajanje na strežniku baz podatkov. Lahko ga sestavite in izvedete z različnimi parametri in rezultati.
Vsak postopek ima svoje edinstveno ime, na katero se je treba sklicevati. Ta enota podprograma je shranjena kot objekt baze podatkov v DB.
Podprogram ni nič drugega kot postopek in ga je treba ustvariti ročno, kot želimo, in ga shraniti kot objekt DB.
Shranjeni postopki so samostojni bloki programa, ki jih lahko shranimo v DB. Z uporabo imena shranjene procedure ga lahko pokličemo in izvršimo. Uporablja se predvsem za izvajanje procesa v PL / SQL. Postopek ima lahko ugnezdene bloke ali pa je ugnezden znotraj drugih blokov.
Shranjeni postopek ima 3 dele:
- Del izjave (neobvezno): V tem delu lahko prijavimo spremenljivke, konstante, kazalce itd., To je neobvezen del. Glede na zahteve ga lahko uporabimo.
- Izvedbeni del: Ta del vsebuje glavno poslovno logiko postopka. Običajno bo imel blok stavkov SQL.
- Izjemen rokovalni del (neobvezno): V tem delu lahko obvladamo izjemo, do katere lahko pride zaradi kode dela Execution. Prav tako je neobvezno.
Na podlagi zahtev lahko izdelamo postopek. Vrednosti lahko posredujemo ali pridobimo iz parametrov.
V shranjenih postopkih so na voljo tri vrste parametrov. To so:
- IN: Uporablja se za posredovanje vhodne vrednosti shranjeni proceduri. Shranjeni postopek bo uporabil vhodni parameter v programu kot spremenljivko samo za branje. Vrednosti ni mogoče spremeniti znotraj podprogramov. Oracle uporablja IN kot privzeti način parametra. To je privzeti parameter.
- ZUNAJ: Uporablja se za vrnitev ali pridobitev vrednosti iz shranjenega postopka po izvedbi. Je spremenljivka za branje in pisanje znotraj podprogramov. Vrednost je mogoče spremeniti znotraj podprogramov.
- VHOD / IZHOD: Uporablja se za posredovanje vhodnih vrednosti shranjeni proceduri in vrnitev ali pridobitev vrednosti iz postopka. Je tako berljiv kot zapisljiv. Lahko ga beremo in spreminjamo.
VRNITEV
Ključno besedo return bomo uporabili za vrnitev nadzora nad glavnim programom, kot je program Java. Ko postopek najde ključno besedo RETURN, bo zapustil izvedbo in preskočil kodo ali stavek po njej.
Kako poklicati shranjeni postopek z Jave
V Javi imamo vmesnik CallableStatement za klic shranjenega postopka. Objekt vmesnika CallableStatement je mogoče ustvariti z uporabo metode prepaCall () vmesnika Connection, nato pa bi morali za izvedbo shranjenega postopka v programu Java poklicati metodo executeQuery ().
Preden napišemo program Java, da bi to implementirali, bi morali ustvariti shranjene postopke za njegovo uporabo v programu.
Sledi sintaksa klica shranjenih postopkov v programu Java:
Sintaksa | Število parametrov |
---|---|
{pokličite PROCEDURE_NAME ()} | Ni vhodnih in izhodnih parametrov |
{pokličite PROCEDURE_NAME (?,?,?)} | Trije vhodni parametri in brez izhodnih parametrov |
{? = pokličite PROCEDURE_NAME ()} | Ni vhodnih parametrov in en izhodni parameter (vrednost RETURN) |
{? = pokličite PROCEDURE_NAME (?,?)} | Dva vhodna in en izhodni parameter (RETURN Value) |
Koraki za ustvarjanje shranjenih postopkov
# 1) Ustvarite postopek v strežniku DB. Tu uporabljamo Oracle DB.
# 2) Sintaksa za ustvarjanje celotnega postopka:
Shranjeni postopek lahko zapišemo tudi v kodo Java.
# 3) Prenesite parametra IN in OUT, da ga uporabite v postopku.
# 4) Omeniti je treba ključno besedo AS / IS. Če v nov postopek dodajamo še en postopek, uporabite ključno besedo IS ali sicer AS ključno besedo, če je postopek samostojen.
# 5) Navedite, da spremenljivke niso obvezne glede na zahteve, ki jih lahko ustvarimo.
# 6) Nato BEGIN postopek s ključno besedo BEGIN in nato napišite stavke SQL ali poizvedbe, ki jih je treba izvesti v postopku.
# 7) Nato lahko izjemo obravnavamo v delu Izjema. Prav tako ni obvezno omeniti.
# 8) Postopek zaključite z omembo ključne besede END in imena postopka.
Postopek lahko ustvarimo v programu Oracle in ga shranimo z edinstvenim imenom in ga pokličemo iz programa Java. Postopek lahko ustvarimo in ga pokličemo tudi v Javi.
Ustvarite postopek v Oracle, ga shranite in pokličite postopek v programu Java.
# 1) Odprite strežnik baze podatkov. Tu uporabljamo strežnik Oracle DB.
#two) Z desno miškino tipko kliknite mapo Postopek in kliknite možnost Nov postopek.
# 3) Zahteval bo ime postopka in podrobnosti parametra.
Opomba: Podrobnosti parametra lahko damo tudi med pisanjem postopka.
# 4) Postopek napišite po korakih, o katerih smo že govorili v tej vadnici, in shranite postopek z edinstvenim imenom.
Postopek na posnetku zaslona bo prikazal izhod v DB. Lahko ga spremenimo tako, da se prikaže tudi v programu Java. Za to moramo uporabiti parametre OUT.
# 5) Zaženite postopek s klikom na gumb za zagon
# 6) Vnesite vrednost v stolpec Vhodna vrednost. Prikazali bodo podatke za dano vrednost.
programska ura za prosti čas za pc
Do zdaj smo videli, kako ustvariti in izvajati postopek v sami konzoli DB.
Ustvari postopek v DB. Pokličite ga in prikažite podatke v konzoli Java .
Ustvarite naslednji postopek z zgornjimi koraki in ga shranite z imenom »DISPLAY_EMPLOYEE_DETAILS«.
Primer programa shranjenega postopka Java
package com.STH.JDBC; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class StoredProcedureExample { public static void main(String() args) throws ClassNotFoundException { Class.forName('oracle.jdbc.driver.OracleDriver'); //Connecting to Oracle DB Try (Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { // Creating prepared Statement CallableStatementCallStmt = conn.prepareCall('{call DISPLAY_EMPLOYEE_DETAILS(?,?,?,?)}'); //Passing Input Parameter CallStmt.setInt(1,1001); //Retrieving the Output Parameters values CallStmt.registerOutParameter(2, java.sql.Types.VARCHAR); CallStmt.registerOutParameter(3, java.sql.Types.VARCHAR); CallStmt.registerOutParameter(4, java.sql.Types.VARCHAR); //Calling the execute to execute the procedure and retrieve the data CallStmt.execute(); System.out.println('First Name: '+ CallStmt.getString(2)+'
Last Name: '+ CallStmt.getString(3) + '
Email: ' + CallStmt.getString(4)); }catch (SQLException e) { e.printStackTrace(); } } }
IZHOD:
Pojasnilo:
V zgornjem programu smo ustvarili en postopek in ga shranili v Oracle DB. Nato je ta postopek poklical s pomočjo CallableStatement in podatke prikazal v Java Console.
- Ustvarite postopek in ga shranite v Oracle DB.
- V programu Java odprite povezavo DB in pokličite metodo prepaCall z uporabo povezav in objektov CallableStatement.
- Vrednost vhodnega parametra posredujte z metodo setXXX.
- Pridobite vrednosti izhodnih parametrov z metodo registerOutParameter. Pri tej metodi bi morali posredovati vrednost indeksa parametra in podatkovni tip parametra. Vrednosti bo shranil v indeks parametrov.
- Z uporabo metod getXXX lahko pridobimo podatke in jih prikažemo v konzoli Java.
Ustvarite postopek in ga izvedite v samem programu Java.
Java program
package com.STH.JDBC; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; public class StoredProcedureExample1 { public static void main(String() args) throws ClassNotFoundException { String Stored_Procedure = 'CREATE OR REPLACE PROCEDURE UPD_EMPLOYEE_DETAILS
' +'(
' + ' PARAM1 IN NUMBER,
' + ' PARAM2 IN NUMBER
'+ ') IS
'+ ' BEGIN
'+ 'UPDATE EMPLOYEE_DETAILS SET EMPNUM= PARAM2 WHERE EMPNUM = PARAM1;
'+ 'COMMIT;
'+ 'END UPD_EMPLOYEE_DETAILS;
'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) {// Creating prepared Statement Statement stmt = conn.createStatement(); CallableStatementCallStmt = conn.prepareCall('{call UPD_EMPLOYEE_DETAILS(?,?)}'); stmt.execute(Stored_Procedure); //Setting the values to pass the procedure CallStmt.setInt(1,1010); CallStmt.setInt(2, 10010); //Calling executeUpdate method to update the values using Procedure CallStmt.executeUpdate(); System.out.println(' Successfully Updated ' ); } catch (SQLException e) { e.printStackTrace(); } } }
IZHOD:
Podatki v tabeli Employee_details pred izvajanjem programa:
Podatki v tabeli Employee_details po izvedbi programa:
Pojasnilo:
V zgornjem programu kodo postopka shranimo kot niz.
String Stored_Procedure = 'CREATE OR REPLACE PROCEDURE UPD_EMPLOYEE_DETAILS
' +'(
' +' PARAM1 IN NUMBER,
' +' PARAM2 IN NUMBER
'+ ') IS
'+' BEGIN
'+'UPDATE EMPLOYEE_DETAILS SET EMPNUM= PARAM2 WHERE EMPNUM = PARAM1;
'+'COMMIT;
'+'END UPD_EMPLOYEE_DETAILS;
';
- Odprite Oracle DB Connection in z objektom povezave ustvarite objekt stavka.
- Pokličite metodo createStatement z uporabo stavka, ker postopek ustvarjamo v kodi Java.
- Pokličite postopek z uporabo sintakse {pokličite UPD_EMPLOYEE_DETAILS (?,?) za pripravo metode CallCallableStatement.
- Ker postopek ustvarjamo v kodi Java, moramo izvesti to 'Ustvari kodo postopka'.
- Za izvedbo tega postopka pokličite izvršilno metodo z uporabo objekta Statement “ stmt.execute (Stored_Procedure) '. To bo ustvarilo postopek začasno v DB.
- Obseg postopka je konec izvajanja programa. Po tem ne bo več na voljo. Z uporabo metod setXXX nastavite vrednosti, ki jih želite posodobiti, v tabeli Employee_Details.
- Pokličite metodo executeUpdate z uporabo predmeta callableStatement. Ta metoda bo posodobila vrednosti v zgodbi Empoyee_Details.
- Preverite tabelo Employee_details, ali so bili podatki pravilno posodobljeni.
Pomembne točke:
- Šaržna obdelava izboljša zmogljivost in ohranja doslednost podatkov.
- Izvajanje več stavkov SQL v eni transakciji je znano kot paketna obdelava.
- Shranjeni postopek je blok stavkov SQL, ki se uporablja za izvajanje poslovne logike.
- Vhodni parameter lahko z uporabo ključne besede IN posredujemo postopku in ključno besedo OUT za izhodni parameter.
- Ustvarimo lahko postopek v samem strežniku DB in začasno tudi s kodo Java.
Pogosto zastavljena vprašanja
V # 1) Kateri vmesnik je treba uporabiti za serijsko obdelavo v JDBC?
Odgovor: Paket Java ima vmesnika Statement in PreparedStatement, ki zagotavljata metode za paketno obdelavo.
V # 2) Kako delujejo paketne posodobitve v JDBC?
Odgovor: Paketna posodobitev JDBC je kup posodobitev, združenih in poslanih v bazo podatkov v enem zamahu, namesto da jih pošiljate posamično. Tako zmanjšuje omrežni promet v zbirki podatkov.
V # 3) Kako paketna obdelava poveča zmogljivost?
Odgovor: Paketna obdelava podatke pošlje v zbirko podatkov naenkrat (samo en povratni let), namesto da bi jih pošiljala enega za drugim, in baza podatkov bo morda lahko izvajala nekatere izjave vzporedno. Tako povečuje zmogljivost aplikacije in prihrani čas.
V # 4) Kateri parametri so sprejeti v shranjenih postopkih v JDBC?
Odgovor: Obstajajo tri vrste parametrov - IN, OUT in INOUT parametri. Parameter IN je, da dobite vhodno vrednost. Parameter OUT je namenjen pridobivanju izhodne vrednosti. Parameter INOUT se uporablja za vhod in izhod.
V # 5) Katere metode so na voljo za izvajanje shranjene procedure v JDBC?
Odgovor: Z uporabo vmesnika CallableStatement lahko pokličemo postopek. Vmesnik CallableStatement ponuja tri metode za izvajanje shranjenih postopkov.
Tri metode so:
- executeUpdate (): To metodo uporabite, če postopek ne vrne nobene vrnjene vrednosti.
- executeQuery (): To metodo uporabite, če postopek vrne samo en nabor rezultatov.
- Izvedi (): To metodo uporabite, če postopek vrne veliko nizov rezultatov ali neznano število nizov rezultatov.
Zaključek
V tej vadnici smo obravnavali postopke paketne obdelave in shranjene postopke. V sodobnem svetu so visoke zmogljivosti, doslednost podatkov in ponovna uporabnost ključne besede za katero koli priljubljeno aplikacijo. Tako paketna obdelava kot shranjeni postopki igrajo zelo pomembno vlogo pri izvajanju teh funkcij. Poznavanje teh je neizogibno za vsakega programskega inženirja.
Priporočeno branje
- Java JDBC Vadnica: Kaj je JDBC (Java Database Connectivity)
- Vadnica za povezavo Java JDBC s primerom programiranja
- Upravljanje transakcij Java JDBC s primerom
- JDBC ResultSet: Kako uporabiti Java ResultSet za pridobivanje podatkov
- Obravnava izjem JDBC - Kako ravnati z izjemami SQL
- JDBC DriverManager, JDBC PreparedStatement In Statement
- JAVA Vadnica za začetnike: 100+ praktičnih Javnih video vadnic