jdbc batch processing
Ovaj tutorial pruža cjelovito razumijevanje JDBC skupne obrade i Java pohranjene procedure s primjerima Java primjera:
U Rukovanje izuzecima JDBC vodič za JDBC serija lekcija , naučili smo načine za rješavanje SQL iznimki uz pomoć programskih primjera.
U ovom uputstvu razgovarat ćemo o metodama skupne obrade u Javi pomoću JDBC upravljačkog programa. Također ćemo naučiti kako stvoriti pohranjene procedure i pozvati ih iz Java programa.
Počnimo s razumijevanjem serijske obrade i njenih prednosti.
Što ćete naučiti:
JDBC skupna obrada
To je postupak izvršavanja nekoliko SQL izraza u jednoj transakciji. Ovaj postupak smanjuje vrijeme komunikacije i povećava performanse. Puno olakšava obradu velike količine podataka.
Prednosti šaržne obrade
Skupna obrada ima za cilj poboljšati izvedbu i dosljednost podataka.
Izvođenje
Razmotrite scenarij u kojem treba dodati više (recimo 5) unosa u tablicu iz JAVA programa. Izravan pristup bit će otvaranje veze s bazom podataka, pisanje INSERT upita i izvršavanje svakog upita pomoću Statementa ili PreparedStatementa.
Ovaj pristup povećat će mrežna putovanja u bazu podataka i kao rezultat toga dovesti će do slabe izvedbe. Korištenjem skupne obrade ovu operaciju možemo izvršiti u jednom pozivu.
Dosljednost podataka
U nekim slučajevima moramo umetnuti / ažurirati podatke u više tablica. To će dovesti do međusobno povezane transakcije u kojoj je važan redoslijed umetanja ili ažuriranja upita. Sve pogreške koje se pojave tijekom izvršavanja rezultirale bi povratom podataka umetnutih prethodnim upitima, ako ih ima.
Primjer:
# 1) Tablica 'EMPLOYEE_DETAILS' ima 3 stupca: iskaznica , Ime , i Uloga zaposlenika.
statement.execute('INSERT INTO EMPLOYEE_DETAILS(ID, NAME, ROLE) ' + 'VALUES ('1','EMPLOYEE_NAME1','ROLE1')');
#dva) Tablica 'EMPLOYEE_ADDRESS' ima 2 stupca: EMP ID i Adresa
statement.execute('INSERT INTO EMPLOYEE_ADDRESS( EMP_ID, ADDRESS) ' + 'VALUES ('1','ADDRESS1')');
U gornjem se primjeru može pojaviti problem kada se prva naredba uspješno izvrši, ali druga izjava ne uspije. U ovoj situaciji nema povratka podataka umetnutih prvom izjavom. To dovodi do nedosljednosti podataka.
Dosljednost podataka možemo postići izvršavanjem transakcije na kraju ili izvršavanjem vraćanja u slučaju bilo kakvih izuzetaka. Ali, da bi se to postiglo, DB se mora ponavljati za svaku izjavu.
S druge strane, u skupnoj obradi, podaci će se predati tek kada se uspješno izvrše svi upiti unutar serije. Inače neće.
Kako izvršiti serijsku obradu
Možemo izvršiti skupnu obradu metodama addbatch () i executeBatch () koje su dostupne i u klasama Statement i PreparedStatement.
U ovom su uputstvu svi programi napisani na Javi. Koristili smo Javu 8 verziju i Oracle DB.
=> Kliknite ovdje za preuzimanje Oracle softvera
=> Kliknite ovdje za preuzimanje Java verzije 8
U sljedećem ćemo primjeru vidjeti kako detaljno izvršiti serijsku obradu. Ima korak-po-korak instalacijskog postupka Java.
Podaci u tablici ZAPOSLENI prije umetanja podataka:
kako izraditi vatrozid za prozore
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();} } }
IZLAZ:
Podaci u tablici ZAPOSLENI nakon umetanja podataka:
Obrazloženje:
U gornji program umetnuli smo podatke o 3 zaposlenika u jedan poziv korištenjem batch operacije.
- Stvorite jedan upit za umetanje za prosljeđivanje vrijednosti stupaca.
- Otvorite vezu i stvorite objekt pripremljenog stanja pomoću objekta povezivanja i pozovite metodu pripremaStatement.
- Zatim postavite vrijednosti za 1svzaposlenik koji koristi metode setXXX i pozovite metodu addBatch () da biste dodali novi red u paketu.
- Ovako dodajte vrijednosti za 2ndi 3rdzaposlenici. Nakon dodavanja upita u metodu addBatch (), trebali bismo pozvati metodu executeBatch () pomoću objekta selectedStatement.
- metoda executeBatch () ubacuje podatke o 3 zaposlenika u jedan poziv.
- Provjerite tablicu ZAPOSLENI jesu li podaci umetnuti ispravno ili ne.
Java pohranjene procedure
Pohranjeni postupak je skupina SQL izraza koji čine jednu jedinicu i izvode određeni zadatak. Oni će se koristiti za izvođenje skupa operacija ili pitanja za izvršavanje na poslužitelju baze podataka. Može se sastaviti i izvršiti s različitim parametrima i rezultatima.
Svaki postupak ima svoj jedinstveni naziv na koji se poziva. Ova podprogramska jedinica pohranjena je kao objekt baze podataka u DB-u.
Podprogram nije ništa drugo doli postupak, i treba ga ručno kreirati kako želimo i pohraniti ga kao DB objekt.
Pohranjene procedure su samostalni blokovi programa koje možemo pohraniti u DB. Korištenjem imena pohranjene procedure možemo ga pozvati i izvršiti. Uglavnom se koristi za izvršavanje procesa u PL / SQL-u. Postupak može imati ugniježđene blokove ili može biti ugniježđen unutar ostalih blokova.
Pohranjeni postupak ima 3 dijela:
- Dio izjave (neobavezno): U ovom dijelu možemo deklarirati varijable, konstante, pokazivače itd., To je neobavezni dio. Na temelju zahtjeva, možemo ga koristiti.
- Izvršni dio: Ovaj dio sadrži glavnu poslovnu logiku postupka. Obično će imati blok SQL izraza.
- Izuzetan rukovanje dijelom (nije obavezno): U ovom dijelu možemo se nositi s iznimkom koja se može dogoditi zbog koda dijela izvršenja. Također je neobavezna.
Na temelju zahtjeva možemo stvoriti postupak. Vrijednosti možemo proslijediti ili dohvatiti iz parametara.
U pohranjenim procedurama dostupne su tri vrste parametara. Oni su:
- U: Koristi se za prosljeđivanje ulazne vrijednosti pohranjenoj proceduri. Pohranjena procedura koristit će ulazni parametar u programu kao varijablu samo za čitanje. Vrijednost se ne može mijenjati unutar potprograma. Oracle koristi IN kao zadani način rada parametra. To je zadani parametar.
- VAN: Koristi se za vraćanje ili dobivanje vrijednosti iz pohranjene procedure nakon izvršenja. To je varijabla za čitanje i pisanje unutar potprograma. Vrijednost se može mijenjati unutar potprograma.
- ULAZ / IZLAZ: Koristi se za prosljeđivanje ulaznih vrijednosti pohranjenoj proceduri i vraćanje ili dobivanje vrijednosti iz postupka. Čitljiv je i za pisanje. Možemo ga čitati i mijenjati.
POVRATAK
Upotrijebit ćemo ključnu riječ return za vraćanje kontrole glavnom programu, poput Java programa. Kada postupak pronađe ključnu riječ RETURN, izaći će iz izvršenja i preskočiti kôd ili izraz nakon nje.
Kako nazvati pohranjenu proceduru s Jave
U Java imamo sučelje CallableStatement za pozivanje pohranjene procedure. Objekt sučelja CallableStatement može se stvoriti metodom prepaCall () sučelja Connection, a nakon toga trebali bismo pozvati metodu executeQuery () za izvršenje pohranjene procedure u programu Java.
Prije pisanja Java programa za provedbu ovoga, trebali bismo stvoriti pohranjene procedure za upotrebu u programu.
Slijedi sintaksa pozivanja pohranjenih procedura u programu Java:
Sintaksa | Broj parametara |
---|---|
{poziv PROCEDURE_NAME ()} | Nema ulaznih parametara niti izlaznih parametara |
{nazvati PROCEDURE_NAME (?,?,?)} | Tri ulazna parametra i nema izlaznih parametara |
{? = nazvati PROCEDURE_NAME ()} | Nema ulaznih parametara i jedan izlazni parametar (RETURN vrijednost) |
{? = nazvati PROCEDURE_NAME (?,?)} | Dva ulazna parametra i jedan izlazni parametar (RETURN vrijednost) |
Koraci za stvaranje pohranjenih postupaka
# 1) Stvorite proceduru na DB poslužitelju. Ovdje koristimo Oracle DB.
# 2) Sintaksa za stvaranje cjelovitog postupka:
Pohranjenu proceduru možemo napisati i u Java kodu.
# 3) Proslijedite parametre IN i OUT da biste ih koristili u postupku.
# 4) Treba spomenuti ključnu riječ AS / IS. Ako u novi postupak dodajemo još jedan postupak, upotrijebite ključnu riječ IS ili AS ključnu riječ ako je postupak samostalni.
# 5) Izjavite varijable, nisu obvezne, na temelju zahtjeva koji možemo stvoriti.
# 6) Zatim ZAPOČNITE postupak pomoću ključne riječi BEGIN, a zatim napišite SQL izraze ili upite koji će se izvesti u proceduri.
# 7) Dalje, izuzetak možemo riješiti u dijelu Iznimka. Također nije obvezno spominjati.
# 8) Završite postupak spominjanjem ključne riječi END i naziva procedure.
Postupak možemo stvoriti u programu Oracle i spremiti ga s jedinstvenim imenom i pozvati taj postupak iz Java programa. Možemo stvoriti proceduru i pozvati je na Java.
Stvorite proceduru u Oracleu, spremite je i pozovite proceduru u Java programu.
# 1) Otvorite poslužitelj baze podataka. Ovdje koristimo Oracle DB poslužitelj.
#dva) Desnom tipkom miša kliknite mapu Procedura i kliknite opciju Novi postupak.
# 3) Tražit će naziv postupka i detalje o parametru.
br. 1 besplatni mrežni video s YouTubea jedan video pretvarač
Bilješka: Pojedinosti o parametru možemo dati i tijekom pisanja postupka.
# 4) Napišite postupak koristeći korake o kojima smo već govorili u ovom vodiču i spremite postupak s jedinstvenim imenom.
Postupak na snimci zaslona prikazat će izlaz u DB-u. Možemo ga promijeniti tako da se prikazuje i u programu Java. Za to trebamo koristiti OUT parametre.
# 5) Pokrenite postupak klikom na gumb za pokretanje
# 6) Unesite vrijednost u stupac Ulazna vrijednost. Prikazat će podatke za zadanu vrijednost.
Do sada smo vidjeli kako stvoriti i izvršiti proceduru u samoj DB konzoli.
Stvorite proceduru u DB-u. Nazovite ga i prikažite podatke u Java konzoli .
Izradite sljedeći postupak koristeći gornje korake i spremite ga s imenom “DISPLAY_EMPLOYEE_DETAILS”.
Primjer programa pohranjene Java procedure
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(); } } }
IZLAZ:
Obrazloženje:
U gore navedenom programu stvorili smo jedan postupak i spremili ga u Oracle DB. Zatim je taj postupak pozvao pomoću CallableStatement i prikazao podatke u Java Consoleu.
- Stvorite proceduru i spremite je u Oracle DB.
- U programu Java otvorite DB vezu i pozovite metodu prepaCall pomoću objekata veze i CallableStatement.
- Proslijedite vrijednost ulaznog parametra pomoću metode setXXX.
- Dohvatite vrijednosti izlaznih parametara pomoću metode registerOutParameter. U ovoj bismo metodi trebali proslijediti vrijednost indeksa parametra i vrstu podataka parametra. Pohranit će vrijednosti u indeks parametara.
- Pomoću metoda getXXX možemo dohvatiti podatke i prikazati ih na Java konzoli.
Stvorite proceduru i izvršite je u samom 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(); } } }
IZLAZ:
Podaci u tablici Employee_details prije izvođenja programa:
Podaci u tablici Employee_details nakon izvršenja programa:
Obrazloženje:
U gornjem programu kôd postupka pohranjujemo kao 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;
';
- Otvorite Oracle DB Connection i stvorite objekt izraza pomoću objekta povezivanja.
- Pozovite metodu createStatement pomoću objekta naredbe, jer mi kreiramo proceduru u Java kodu.
- Pozovite postupak pomoću sintakse {nazvati UPD_EMPLOYEE_DETAILS (?,?) za pripremu CallCall metode CallableStatement.
- Budući da kreiramo proceduru u Java kodu, moramo izvršiti taj 'Stvori kod postupka'.
- Da biste izvršili taj postupak, pozovite metodu izvršenja pomoću objekta Statement “ stmt.execute (Stored_Procedure) '. Ovo će stvoriti postupak privremeno u DB-u.
- Opseg postupka je kraj izvršenja programa. Nakon toga neće biti dostupan. Koristeći metode setXXX, postavite vrijednosti koje će se ažurirati u tablici Employee_Details.
- Pozovite metodu executeUpdate pomoću objekta callableStatement. Ova metoda će ažurirati vrijednosti u priči Empoyee_Details.
- Provjerite tablicu Employee_details jesu li podaci ispravno ažurirani.
Bodovi koje treba zapamtiti:
- Skupna obrada poboljšava performanse i održava dosljednost podataka.
- Izvršenje nekoliko SQL izraza u jednoj transakciji poznato je pod nazivom Skupna obrada.
- Pohranjena procedura je blok SQL izraza koji se koristi za izvođenje poslovne logike.
- Ulazni parametar možemo proslijediti pomoću ključne riječi IN u proceduru i ključne riječi OUT za izlazni parametar.
- Možemo stvoriti proceduru na samom DB poslužitelju i privremeno koristeći Java kôd.
Često postavljana pitanja
P # 1) Koje sučelje treba koristiti za obavljanje skupne obrade u JDBC?
Odgovor: Java paket ima Statement i PreparedStatement sučelja, koja pružaju metode za skupnu obradu.
P # 2) Kako skupna ažuriranja rade u JDBC-u?
Odgovor: Skupno ažuriranje JDBC hrpa je ažuriranja grupiranih i poslanih u bazu podataka u jednom potezu, umjesto da se pojedinačna ažuriranja šalju. Dakle, smanjuje mrežni promet u bazi podataka.
P # 3) Kako skupna obrada povećava izvedbu?
Odgovor: Skupna obrada šalje podatke u bazu podataka odjednom (samo 1 povratno putovanje), umjesto da ih šalje jedan po jedan, a baza podataka možda će moći paralelno izvršavati neke izjave. Ovako, povećava performanse aplikacije i štedi vrijeme.
P # 4) Koji su parametri prihvaćeni u pohranjenim procedurama u JDBC?
Odgovor: Postoje tri vrste parametara - IN, OUT i INOUT parametri. IN parametar je dobiti ulaznu vrijednost. Parametar OUT služi za dohvaćanje izlazne vrijednosti. Parametar INOUT koristi se i za ulaz i za izlaz.
P # 5) Koje su metode dostupne za izvršavanje pohranjene procedure u JDBC?
Odgovor: Korištenjem sučelja CallableStatement možemo nazvati postupak. Sučelje CallableStatement pruža tri metode za izvršavanje pohranjenih procedura.
Tri su metode:
- executeUpdate (): Koristite ovu metodu ako postupak ne vraća povratne vrijednosti.
- executeQuery (): Koristite ovu metodu ako postupak vraća samo jedan skup rezultata.
- izvršiti(): Koristite ovu metodu ako postupak vraća mnoštvo skupova rezultata ili nepoznati broj skupova rezultata.
Zaključak
U ovom smo priručniku obradili skupnu obradu i pohranjene postupke. U modernom svijetu, visoke performanse, dosljednost podataka i ponovna upotrebljivost ključne su riječi za bilo koju popularnu aplikaciju. I skupna obrada i pohranjeni postupci igraju vrlo važnu ulogu u primjeni ovih značajki. Znanje o njima neizbježno je za svakog softverskog inženjera.
Preporučena literatura
- Java JDBC Vodič: Što je JDBC (povezivanje Java baze podataka)
- Vodič za Java JDBC povezivanje s primjerom programiranja
- Java JDBC upravljanje transakcijama s primjerom
- JDBC ResultSet: Kako koristiti Java ResultSet za preuzimanje podataka
- Rukovanje iznimkama JDBC - Kako postupati s SQL iznimkama
- JDBC DriverManager, JDBC PreparedStatement and Statement
- JAVA Tutorial za početnike: 100+ praktičnih Java Video tutorijala