jdbc batch processing
Denne vejledning giver en komplet forståelse af JDBC Batch Processing og Java Stored Procedure med eksempler på Java-eksempler:
I JDBC undtagelseshåndtering tutorial af JDBC tutorial-serie , vi lærte måder at håndtere SQL-undtagelser ved hjælp af programmeringseksempler.
I denne vejledning vil vi diskutere metoder til at udføre batchbehandling i Java ved hjælp af JDBC-driveren. Vi lærer også om, hvordan du opretter lagrede procedurer og kalder det fra et Java-program.
Lad os starte med at forstå batchbehandling og dens fordele.
Hvad du vil lære:
JDBC batchbehandling
Det er processen med at udføre flere SQL-sætninger i en transaktion. Denne proces reducerer kommunikationstiden og øger ydeevnen. Det gør behandling af en stor mængde data meget lettere.
Fordele ved batchbehandling
Batch Processing sigter mod at forbedre ydeevne og datakonsistens.
Ydeevne
Overvej scenariet, hvor flere (f.eks. 5) poster skal føjes til en tabel fra et JAVA-program. Den enkle tilgang åbner en forbindelse til databasen, skriver INSERT-forespørgsler og udfører hver forespørgsel ved hjælp af Statement eller PreparedStatement.
Denne tilgang vil øge netværksture til databasen, og som et resultat vil det føre til dårlig ydeevne. Ved hjælp af batchbehandling kan vi udføre denne handling i et opkald.
Datakonsistens
I nogle tilfælde er vi nødt til at indsætte / opdatere data i flere tabeller. Dette vil føre til en sammenhængende transaktion, hvor rækkefølgen af forespørgsler, der indsættes eller opdateres, er vigtig. Eventuelle fejl, der opstår under udførelse, vil resultere i tilbageførsel af de data, der er indsat ved tidligere forespørgsler, hvis nogen.
Eksempel:
# 1) Tabel 'EMPLOYEE_DETAILS' har 3 kolonner: ID , Navn og Medarbejderens rolle.
statement.execute('INSERT INTO EMPLOYEE_DETAILS(ID, NAME, ROLE) ' + 'VALUES ('1','EMPLOYEE_NAME1','ROLE1')');
#to) Tabel 'EMPLOYEE_ADDRESS' har to kolonner: EMP-ID og Adresse
statement.execute('INSERT INTO EMPLOYEE_ADDRESS( EMP_ID, ADDRESS) ' + 'VALUES ('1','ADDRESS1')');
Et problem kan forekomme i ovenstående eksempel, når den første sætning udføres med succes, men den anden sætning mislykkes. I denne situation er der ingen tilbageførsel af de data, der er indsat i den første erklæring. Dette fører til datakonsekvens.
Vi kan opnå datakonsistens ved at foretage transaktionen i slutningen eller udføre en tilbageførsel i tilfælde af undtagelser. Men for at opnå dette skal DB rammes gentagne gange for hver erklæring.
På den anden side, kun når alle forespørgsler inde i en batch udføres med succes, i batchbehandling, bliver dataene forpligtet. Ellers vil det ikke.
Sådan udføres batchbehandling
Vi kan udføre batchbehandling ved hjælp af addbatch () og executeBatch () -metoderne, der er tilgængelige i både Statement- og PreparedStatement-klasser.
I denne vejledning er alle programmer skrevet i Java. Vi har brugt Java 8-versionen og Oracle DB.
=> Klik her for at downloade Oracle-softwaren
=> Klik her for at downloade Java version 8
I det følgende eksempel vil vi se, hvordan man udfører batch-behandling udførligt. Det har den trinvise Java-installationsproces.
Data i MEDARBEJDSTABellen inden indsættelse af data:
let mp3 downloader gratis download fuld version
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();} } }
PRODUKTION:
Data i MEDARBEJDSTABEL efter indsættelse af data:
Forklaring:
I ovenstående program har vi indsat data om 3 medarbejdere i et opkald ved hjælp af batchdrift.
- Opret en indsætningsforespørgsel for at videregive kolonneværdierne.
- Åbn forbindelsen, og opret et prepareretStatement-objekt ved hjælp af forbindelsesobjektet, og kald metoden PreparStatement.
- Indstil derefter værdierne for 1St.medarbejder ved hjælp af setXXX-metoder og kalder metoden addBatch () for at tilføje den nye række i batchen.
- På denne måde tilføj værdierne til 2ndog 3rdmedarbejdere. Efter at have tilføjet forespørgslerne til addBatch () -metoden, skal vi kalde metoden executeBatch () ved hjælp af objektet preparedStatement.
- metoden executeBatch () indsætter de 3 medarbejderes data i et opkald.
- Kontroller medarbejdertabellen, om dataene er indsat korrekt eller ej.
Java-lagrede procedurer
En lagret procedure er en gruppe af SQL-sætninger, der danner en enkelt enhed og udfører en bestemt opgave. De vil blive brugt til at udføre et sæt operationer eller spørgsmål, der skal udføres på en databaseserver. Det kan kompileres og udføres med forskellige parametre og resultater.
Hver procedure har sit unikke navn, der skal henvises til. Denne underprogramenhed er gemt som et databaseobjekt i DB.
Et underprogram er intet andet end en procedure, og det skal oprettes manuelt, som vi ønsker, og gemme det som et DB-objekt.
Lagrede procedurer er enkeltstående blokke af et program, som vi kan gemme i DB. Ved at bruge navnet på den lagrede procedure kan vi ringe og udføre den. Det bruges hovedsageligt til at udføre en proces i PL / SQL. Proceduren kan have indlejrede blokke eller kan være indlejret i de andre blokke.
Den lagrede procedure har 3 dele:
- Erklæringsdel (valgfri): I denne del kan vi erklære variabler, konstanter, markører osv. Det er en valgfri del. Baseret på kravene kan vi bruge det.
- Udførelsesdel: Denne del indeholder procedurens vigtigste forretningslogik. Normalt har den en blok af SQL-udsagn.
- Ekstraordinær håndteringsdel (valgfri): I denne del kan vi håndtere den undtagelse, der kan opstå på grund af udførelsesdelkoden. Det er også valgfrit.
Baseret på kravene kan vi oprette en procedure. Vi kan videregive eller hente værdierne fra parametrene.
Der er tre typer parametre tilgængelige i lagrede procedurer. De er:
- I: Det bruges til at overføre inputværdien til den lagrede procedure. Den gemte procedure bruger inputparameteren i programmet som en skrivebeskyttet variabel. Værdien kan ikke ændres inden i underprogrammerne. Oracle bruger IN som standardtilstand for parameteren. Det er standardparameteren.
- UD: Det bruges til at returnere eller hente værdien fra den lagrede procedure efter udførelsen. Det er en læse-skrive variabel inde i underprogrammerne. Værdien kan ændres inden i underprogrammerne.
- IND UD: Det bruges til at overføre inputværdierne til den lagrede procedure og returnere eller hente værdierne fra proceduren også. Det er både læsbart og skrivbart. Vi kan læse og ændre det.
VEND TILBAGE
Vi bruger returordet til at give kontrollen tilbage til hovedprogrammet, såsom Java-programmet. Når proceduren finder nøgleordet RETURN, går det ud af udførelsen og springer koden eller udsagnet over det.
Sådan kaldes lagret procedure fra Java
Vi har en CallableStatement-grænseflade i Java til at ringe til lagret procedure. CallableStatement-interfaceobjekt kan oprettes ved hjælp af prepareCall () -metoden i Connection-grænsefladen, og derefter skal vi kalde executeQuery () -metoden for at udføre den lagrede procedure i Java-programmet.
Før vi skriver Java-programmet for at implementere dette, skal vi oprette lagrede procedurer for at bruge det i programmet.
Følgende er syntaksen for at kalde lagrede procedurer i Java-programmet:
Syntaks | Antal parametre |
---|---|
{kald PROCEDURE_NAME ()} | Ingen inputparametre og ingen outputparametre |
{kald PROCEDURE_NAME (?,?,?)} | Tre inputparametre og ingen outputparametre |
{? = kald PROCEDURE_NAME ()} | Ingen inputparametre og en outputparameter (RETURN-værdi) |
{? = kald PROCEDURE_NAME (?,?)} | To inputparametre og en outputparameter (RETURN-værdi) |
Trin til oprettelse af lagrede procedurer
# 1) Opret proceduren i DB-serveren. Her bruger vi Oracle DB.
# 2) Syntaks til oprettelse af fuld procedure:
Vi kan også skrive den lagrede procedure i Java-kode.
# 3) Videregiv parametrene IN og OUT for at bruge det i proceduren.
# 4) AS / IS-nøgleord skal nævnes. Hvis vi tilføjer en anden procedure i den nye procedure, skal du bruge IS-nøgleordet eller ellers AS-nøgleord, hvis proceduren er uafhængig.
# 5) Erklær variablerne, det er ikke obligatorisk, baseret på det krav, vi kan oprette.
# 6) BEGYN derefter proceduren ved hjælp af BEGIN-nøgleordet, og skriv derefter de SQL-sætninger eller forespørgsler, der skal udføres i proceduren.
# 7) Dernæst kan vi håndtere undtagelsen i undtagelsesdelen. Det er heller ikke obligatorisk at nævne.
# 8) Afslut proceduren ved at nævne END-nøgleordet og procedurenavnet.
Vi kan oprette proceduren i Oracle og gemme den med et unikt navn og kalde den procedure fra Java-programmet. Vi kan også oprette proceduren og kalde den procedure også i Java.
Opret en procedure i Oracle, gem den, og kald proceduren i Java-programmet.
# 1) Åbn databaseserveren. Her bruger vi Oracle DB-serveren.
#to) Højreklik på mappen Procedure, og klik på indstillingen Ny procedure.
# 3) Det beder om navnet på proceduren og parameteroplysninger.
Bemærk: Vi kan også give parameteroplysningerne, mens vi også skriver proceduren.
# 4) Skriv proceduren ved hjælp af de trin, som vi allerede har diskuteret i denne vejledning, og gem proceduren med det unikke navn.
Fremgangsmåden i skærmbilledet viser output i DB. Vi kan ændre det for også at vise det i Java-programmet. Til det er vi nødt til at bruge OUT-parametre.
# 5) Kør proceduren ved at klikke på knappen Kør
# 6) Indtast værdien i kolonnen Inputværdi. Det viser dataene for den givne værdi.
Indtil nu har vi set, hvordan man opretter og udfører proceduren i selve DB-konsollen.
Opret proceduren i DB. Ring til det og vis dataene i Java-konsollen .
Opret følgende procedure ved hjælp af ovenstående trin, og gem den med navnet “DISPLAY_EMPLOYEE_DETAILS”.
Java-lagret procedureeksempelprogram
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(); } } }
PRODUKTION:
sql tekniske interview spørgsmål og svar til freshers
Forklaring:
I ovenstående program er det, vi har gjort, at vi har oprettet en procedure og gemt den i Oracle DB. Derefter kaldte denne procedure ved hjælp af CallableStatement og viste dataene i Java Console.
- Opret proceduren, og gem den i Oracle DB.
- I Java-programmet skal du åbne DB-forbindelsen og ringe til PreparCall-metoden ved hjælp af forbindelsen og CallableStatement-objekterne.
- Videregiv inputparameterværdien ved hjælp af setXXX-metoden.
- Hent outputparameterværdierne ved hjælp af metoden registerOutParameter. I denne metode skal vi videregive parameterindeksværdien og datatypen for parameteren. Det gemmer værdierne i parameterindekset.
- Ved hjælp af getXXX-metoderne kan vi hente dataene og vise dem i Java-konsollen.
Opret proceduren, og udfør den i selve Java-programmet.
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(); } } }
PRODUKTION:
Data i tabellen Employee_details før programmet gennemføres:
Data i Employee_details-tabellen efter gennemførelsen af programmet:
Forklaring:
I ovenstående program gemmer vi procedurekoden som en streng.
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;
';
- Åbn Oracle DB Connection, og opret sætningsobjektet ved hjælp af forbindelsesobjektet.
- Ring til createStatement-metoden ved hjælp af sætningsobjekt, fordi vi opretter proceduren i Java-kode.
- Ring til proceduren ved hjælp af syntaksen {ring UPD_EMPLOYEE_DETAILS (?,?) for at forberede Call-metoden til den CallableStatement.
- Da vi opretter proceduren i Java-kode, skal vi udføre den 'Opret procedurekode'.
- For at udføre denne procedure skal du kalde metoden execute ved hjælp af Statement-objektet “ stmt.execute (Stored_Procedure) ”. Dette opretter midlertidigt proceduren i DB.
- Procedurens omfang er slutningen af gennemførelsen af programmet. Derefter er den ikke tilgængelig. Brug setXXX-metoder til at indstille de værdier, der skal opdateres i tabellen Employee_Details.
- Ring til metoden executeUpdate ved hjælp af callableStatement-objekt. Denne metode opdaterer værdierne i Empoyee_Details fortællingen.
- Tjek tabellen Employee_details, om dataene er opdateret korrekt.
Punkter at huske:
- Batchbehandling forbedrer ydeevnen og opretholder datakonsistens.
- Udførelse af flere SQL-sætninger i en transaktion kaldes batchbearbejdning.
- Lagret procedure er blokken af SQL-sætninger, der bruges til at udføre forretningslogik.
- Vi kan sende inputparameteren ved hjælp af IN-nøgleordet til proceduren og OUT-nøgleordet for outputparameteren.
- Vi kan oprette en procedure på selve DB-serveren og midlertidigt også bruge Java-kode.
Ofte stillede spørgsmål
Q # 1) Hvilken grænseflade skal bruges til at udføre batchbehandling i JDBC?
Svar: Java-pakken har Statement- og PreparedStatement-grænseflader, som giver metoderne til at udføre batchbehandling.
Spørgsmål nr. 2) Hvordan fungerer batchopdateringer i JDBC?
Svar: En JDBC-batchopdatering er en masse opdateringer grupperet og sendt til databasen på én gang i stedet for at sende opdateringerne en efter en. Således reducerer det netværkstrafikken i databasen.
Spørgsmål nr. 3) Hvordan øger batchbehandling ydeevnen?
Svar: Batchbehandling sender dataene til databasen ad gangen (kun 1 returrejse) snarere end at sende en efter en, og databasen kan muligvis udføre nogle udsagn parallelt. Som dette øger applikationens ydeevne og sparer tid.
Q # 4) Hvad er de parametre, der accepteres i lagrede procedurer i JDBC?
Svar: Der er tre typer parametre – IN, OUT og INOUT parametre. IN-parameteren er at få inputværdien. OUT-parameteren er til at hente outputværdien. INOUT-parameteren bruges til både input og output.
Spørgsmål nr. 5) Hvad er de tilgængelige metoder til at udføre en lagret procedure i JDBC?
Svar: Ved hjælp af CallableStatement Interface kan vi kalde proceduren. CallableStatement-interface giver tre metoder til at udføre de lagrede procedurer.
De tre metoder er:
- executeUpdate (): Brug denne metode, hvis proceduren ikke returnerer nogen returværdier.
- executeQuery (): Brug denne metode, hvis proceduren kun returnerer et resultatsæt.
- udfør (): Brug denne metode, hvis proceduren returnerer mange resultatsæt eller et ukendt antal resultatsæt.
Konklusion
Vi har dækket batchbehandling og lagrede procedurer i denne vejledning. I den moderne verden er høj ydeevne, datakonsistens og genanvendelighed slagordene for enhver populær applikation. Både batchbehandling og lagrede procedurer spiller en meget vigtig rolle i implementeringen af disse funktioner. Kendskab til disse er uundgåelig for enhver softwareingeniør.
Anbefalet læsning
- Java JDBC Tutorial: Hvad er JDBC (Java Database Connectivity)
- Java JDBC-forbindelsesvejledning med programmeringseksempel
- Java JDBC-transaktionsstyring med eksempel
- JDBC ResultSet: Sådan bruges Java ResultSet til at hente data
- JDBC-undtagelseshåndtering - Sådan håndteres SQL-undtagelser
- JDBC DriverManager, JDBC forberedt Erklæring og erklæring
- JAVA-vejledning til begyndere: 100+ praktiske Java-videovejledninger