jdbc batch processing
Tento výukový program poskytuje úplné porozumění dávkovému zpracování JDBC a uložené proceduře Java s ukázkovými příklady Java:
V Zpracování výjimek JDBC návod na Série výukových programů JDBC , jsme se naučili způsoby, jak zvládnout výjimky SQL pomocí příkladů programování.
V tomto tutoriálu probereme metody dávkového zpracování v Javě pomocí ovladače JDBC. Dozvíme se také, jak vytvořit uložené procedury a volat je z programu Java.
Začněme pochopením dávkového zpracování a jeho výhod.
Co se naučíte:
Dávkové zpracování JDBC
Jedná se o proces provádění několika příkazů SQL v jedné transakci. Tento proces zkracuje dobu komunikace a zvyšuje výkon. Díky tomu je zpracování velkého množství dat mnohem jednodušší.
Výhody dávkového zpracování
Cílem dávkového zpracování je zlepšit výkon a konzistenci dat.
Výkon
Zvažte scénář, kdy má být do tabulky z programu JAVA přidáno více (řekněme 5) záznamů. Přímým přístupem bude otevření připojení k databázi, psaní INSERT dotazů a provedení každého dotazu pomocí Statement nebo PreparedStatement.
Tento přístup zvýší síťové výpadky do databáze a ve výsledku povede ke špatnému výkonu. Pomocí dávkového zpracování můžeme tuto operaci provést v jednom hovoru.
Konzistence dat
V některých případech musíme vložit / aktualizovat data do více tabulek. To povede k vzájemně související transakci, kde je důležitá sekvence vkládaných nebo aktualizovaných dotazů. Jakékoli chyby, ke kterým dojde během provádění, budou mít za následek vrácení dat vložených předchozími dotazy, pokud existují.
Příklad:
# 1) Tabulka „EMPLOYEE_DETAILS“ má 3 sloupce: ID , název , a Role zaměstnance.
statement.execute('INSERT INTO EMPLOYEE_DETAILS(ID, NAME, ROLE) ' + 'VALUES ('1','EMPLOYEE_NAME1','ROLE1')');
#dva) Tabulka „EMPLOYEE_ADDRESS“ má 2 sloupce: EMP ID a Adresa
statement.execute('INSERT INTO EMPLOYEE_ADDRESS( EMP_ID, ADDRESS) ' + 'VALUES ('1','ADDRESS1')');
Ve výše uvedeném příkladu může nastat problém, když se první příkaz provede úspěšně, ale druhý příkaz selže. V této situaci neexistuje vrácení dat vložených prvním příkazem. To vede k nekonzistenci dat.
Konzistence dat můžeme dosáhnout potvrzením transakce na konci nebo provedením odvolání v případě jakýchkoli výjimek. Aby toho však bylo možné dosáhnout, musí být DB opakovaně zasažen pro každý příkaz.
Na druhou stranu, při dávkovém zpracování budou data potvrzena pouze tehdy, když se všechny dotazy v dávce spustí úspěšně. Jinak tomu tak nebude.
Jak provést dávkové zpracování
Můžeme provádět dávkové zpracování pomocí metod addbatch () a executeBatch (), které jsou k dispozici ve třídách Statement i PreparedStatement.
V tomto výukovém programu jsou všechny programy napsány v jazyce Java. Použili jsme verzi Java 8 a Oracle DB.
=> Kliknutím sem stáhnete software Oracle
=> Kliknutím sem stáhnete verzi Java 8
V následujícím příkladu uvidíme, jak komplikovaně provést dávkové zpracování. Má postup instalace Java krok za krokem.
Data v tabulce ZAMĚSTNANCI před vložením dat:
jak naprogramovat počítač pro začátečníky
Program Java
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();} } }
VÝSTUP:
Údaje v tabulce ZAMĚSTNANCI po vložení údajů:
Vysvětlení:
Ve výše uvedeném programu jsme vložili data 3 zaměstnanců do jednoho hovoru pomocí dávkové operace.
- Vytvořte jeden vkládací dotaz pro předání hodnot sloupce.
- Otevřete připojení a vytvořte připravený objekt pomocí objektu připojení a zavolejte metodu prepareStatement.
- Poté nastavte hodnoty pro 1Svatýzaměstnanec používající metody setXXX a zavolat metodu addBatch () a přidat nový řádek v dávce.
- Takto přidejte hodnoty pro 2nda 3rdzaměstnanci. Po přidání dotazů do metody addBatch () bychom měli zavolat metodu executeBatch () pomocí objektu readyStatement.
- Metoda executeBatch () vloží data 3 zaměstnanců do jednoho hovoru.
- Zkontrolujte tabulku ZAMĚSTNANEC, zda byla data vložena správně nebo ne.
Uložené procedury Java
Uložená procedura je skupina příkazů SQL, které tvoří jednu jednotku a provádějí konkrétní úkol. Budou použity k provedení sady operací nebo otázek k provedení na databázovém serveru. Může být sestaven a proveden s různými parametry a výsledky.
Každý postup má svůj jedinečný název, na který se má odkazovat. Tato podprogramová jednotka je uložena jako databázový objekt v DB.
Podprogram není nic jiného než procedura a měl by být vytvořen ručně, jak chceme, a uložit jej jako objekt DB.
Uložené procedury jsou samostatné bloky programu, které můžeme uložit do DB. Použitím názvu uložené procedury jej můžeme zavolat a spustit. Používá se hlavně k provedení procesu v PL / SQL. Postup může mít vnořené bloky nebo může být vnořený uvnitř ostatních bloků.
Uložená procedura má 3 části:
- Část prohlášení (volitelná): V této části můžeme deklarovat proměnné, konstanty, kurzory atd., Je to volitelná část. Na základě požadavků jej můžeme použít.
- Exekuční část: Tato část obsahuje hlavní obchodní logiku postupu. Normálně bude mít blok příkazů SQL.
- Výjimečná manipulační část (volitelně): V této části můžeme zpracovat výjimku, která může nastat kvůli kódu součásti Execution. Je také volitelný.
Na základě požadavků můžeme vytvořit postup. Hodnoty můžeme předat nebo načíst z parametrů.
Uložené procedury jsou k dispozici tři typy parametrů. Oni jsou:
- V: Používá se k předání vstupní hodnoty uložené proceduře. Uložená procedura použije vstupní parametr v programu jako proměnnou jen pro čtení. Hodnotu nelze v podprogramech změnit. Oracle používá IN jako výchozí režim parametru. Je to výchozí parametr.
- VEN: Používá se k vrácení nebo získání hodnoty ze uložené procedury po provedení. Jedná se o proměnnou pro čtení a zápis uvnitř podprogramů. Hodnotu lze změnit uvnitř podprogramů.
- DOVNITŘ VEN: Používá se k předání vstupních hodnot do uložené procedury a také k vrácení nebo získání hodnot z procedury. Je čitelný i zapisovatelný. Můžeme to přečíst a upravit.
VRÁTIT SE
Klíčové slovo return použijeme k vrácení ovládacího prvku zpět hlavnímu programu, například programu Java. Když procedura najde klíčové slovo RETURN, ukončí provádění a přeskočí kód nebo příkaz za ním.
Jak volat uloženou proceduru z Javy
Máme rozhraní CallableStatement v Javě pro volání uložené procedury. Objekt rozhraní CallableStatement lze vytvořit pomocí metody prepareCall () rozhraní Connection a poté bychom měli zavolat metodu executeQuery () k provedení uložené procedury v programu Java.
Před napsáním programu Java k jeho implementaci bychom měli vytvořit uložené procedury, abychom jej mohli v programu použít.
Následuje syntaxe pro volání uložených procedur v programu Java:
Syntax | Počet parametrů |
---|---|
{volání PROCEDURE_NAME ()} | Žádné vstupní parametry a žádné výstupní parametry |
{volání PROCEDURE_NAME (?,?,?)} | Tři vstupní parametry a žádné výstupní parametry |
{? = volat PROCEDURE_NAME ()} | Žádné vstupní parametry a jeden výstupní parametr (RETURN Value) |
{? = volat PROCEDURE_NAME (?,?)} | Dva vstupní parametry a jeden výstupní parametr (RETURN Value) |
Kroky k vytvoření uložených procedur
# 1) Vytvořte postup na serveru DB. Zde používáme Oracle DB.
# 2) Syntaxe pro vytvoření úplného postupu:
Uloženou proceduru můžeme zapsat také do Java kódu.
# 3) Chcete-li jej použít v postupu, předejte parametry IN a OUT.
# 4) Je třeba zmínit klíčové slovo AS / IS. Pokud do nového postupu přidáváme další postup, použijte klíčové slovo IS nebo jiné klíčové slovo AS, pokud je postup samostatný.
# 5) Deklarujte proměnné, není to povinné, na základě požadavku, který můžeme vytvořit.
# 6) Potom ZAČNĚTE proceduru pomocí klíčového slova BEGIN a poté napište příkazy SQL nebo dotazy, které mají být provedeny v proceduře.
# 7) Dále můžeme zpracovat výjimku v části Výjimka. Rovněž není povinné se zmínit.
# 8) Ukončete proceduru uvedením klíčového slova END a názvu procedury.
Můžeme vytvořit proceduru v Oracle a uložit ji s jedinečným názvem a zavolat tuto proceduru z programu Java. Můžeme vytvořit proceduru a zavolat ji také v Javě.
Vytvořte proceduru v Oracle, uložte ji a zavolejte proceduru v Java programu.
# 1) Otevřete databázový server. Zde používáme server Oracle DB.
#dva) Pravým tlačítkem klikněte na složku Procedura a klikněte na možnost Nový postup.
# 3) Požádá o název procedury a podrobnosti o parametrech.
Poznámka: Při psaní procedury můžeme uvést podrobnosti o parametru.
# 4) Napište postup pomocí kroků, které jsme již probrali v tomto kurzu, a uložte postup s jedinečným názvem.
Postup na snímku obrazovky zobrazí výstup v DB. Můžeme to změnit tak, aby se zobrazovaly také v programu Java. K tomu musíme použít parametry OUT.
# 5) Spusťte proceduru kliknutím na tlačítko spuštění
# 6) Zadejte hodnotu do sloupce Vstupní hodnota. Zobrazí data pro danou hodnotu.
anime stránky ke sledování anime zdarma
Doposud jsme viděli, jak vytvořit a provést proceduru v samotné konzole DB.
Vytvořte postup v DB. Zavolejte jej a zobrazte data v konzole Java .
Pomocí výše uvedených kroků vytvořte následující postup a uložte jej pod názvem „DISPLAY_EMPLOYEE_DETAILS“.
Ukázkový program uložené procedury 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(); } } }
VÝSTUP:
Vysvětlení:
Ve výše uvedeném programu jsme udělali to, že jsme vytvořili jeden postup a uložili ho do Oracle DB. Poté zavolal tento postup pomocí CallableStatement a zobrazil data v konzole Java.
- Vytvořte postup a uložte jej do Oracle DB.
- V programu Java otevřete připojení DB a zavolejte metodu prepareCall pomocí objektů connection a CallableStatement.
- Předejte hodnotu vstupního parametru pomocí metody setXXX.
- Načíst hodnoty výstupních parametrů pomocí metody registerOutParameter. V této metodě bychom měli předat hodnotu indexu parametru a datový typ parametru. Uloží hodnoty do indexu parametrů.
- Pomocí metod getXXX můžeme načíst data a zobrazit je v konzole Java.
Vytvořte postup a proveďte jej v samotném programu Java.
Program 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; 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(); } } }
VÝSTUP:
Data v tabulce Employee_details před provedením programu:
Data v tabulce Employee_details po provedení programu:
Vysvětlení:
Ve výše uvedeném programu uložíme kód procedury jako řetězec.
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;
';
- Otevřete připojení Oracle DB a vytvořte objekt příkazu pomocí objektu připojení.
- Zavolejte metodu createStatement pomocí objektu příkazu, protože vytváříme proceduru v kódu Java.
- Zavolejte proceduru pomocí syntaxe {volání UPD_EMPLOYEE_DETAILS (?,?) připravit metodu CallableStatement.
- Jelikož vytváříme proceduru v Java kódu, musíme provést tento „Vytvořit procedurní kód“.
- Chcete-li provést tento postup, zavolejte metodu execute pomocí objektu Statement “ stmt.execute (Stored_Procedure) “. Tím se dočasně vytvoří procedura v DB.
- Rozsahem postupu je konec provádění programu. Poté nebude k dispozici. Pomocí metod setXXX nastavte hodnoty, které se mají aktualizovat v tabulce Employee_Details.
- Zavolejte metodu executeUpdate pomocí objektu callableStatement. Tato metoda aktualizuje hodnoty v příběhu Empoyee_Details.
- Zkontrolujte tabulku Employee_details, zda byla data správně aktualizována.
Body k zapamatování:
- Dávkové zpracování zlepšuje výkon a udržuje konzistenci dat.
- Provádění několika příkazů SQL v jedné transakci se nazývá dávkové zpracování.
- Uložená procedura je blok příkazů SQL, který se používá k provádění obchodní logiky.
- Vstupní parametr můžeme předat pomocí klíčového slova IN do procedury a klíčové slovo OUT pro výstupní parametr.
- Můžeme vytvořit proceduru na samotném serveru DB a dočasně také pomocí kódu Java.
Často kladené otázky
Otázka č. 1) Které rozhraní by mělo být použito k provedení dávkového zpracování v JDBC?
Odpovědět: Balíček Java obsahuje rozhraní Statement a PreparedStatement, která poskytují metody pro dávkové zpracování.
Otázka 2) Jak fungují dávkové aktualizace v JDBC?
Odpovědět: Dávková aktualizace JDBC je spousta aktualizací seskupených a odeslaných do databáze najednou, místo aby se aktualizace odesílaly jeden po druhém. Snižuje tedy síťový provoz v databázi.
Otázka č. 3) Jak dávkové zpracování zvyšuje výkon?
Odpovědět: Dávkové zpracování odesílá data do databáze najednou (pouze 1 zpáteční cesta), místo aby posílala jedno po druhém, a databáze může být schopna provádět některé příkazy souběžně. Tímto způsobem zvyšuje výkon aplikace a šetří čas.
Otázka č. 4) Jaké jsou parametry akceptované v uložených procedurách v JDBC?
Odpovědět: Existují tři typy parametrů - parametry IN, OUT a INOUT. Parametr IN má získat vstupní hodnotu. Parametr OUT slouží k načtení výstupní hodnoty. Parametr INOUT se používá pro vstup i výstup.
Otázka č. 5) Jaké jsou metody dostupné k provedení uložené procedury v JDBC?
Odpovědět: Pomocí rozhraní CallableStatement můžeme zavolat proceduru. Rozhraní CallableStatement poskytuje tři metody provádění uložených procedur.
Tyto tři metody jsou:
- executeUpdate (): Tuto metodu použijte, pokud procedura nevrací žádné návratové hodnoty.
- executeQuery (): Tuto metodu použijte, pokud procedura vrací pouze jednu sadu výsledků.
- vykonat(): Tuto metodu použijte, pokud procedura vrací mnoho sad výsledků nebo neznámý počet sad výsledků.
Závěr
V tomto kurzu jsme zahrnovali dávkové zpracování a uložené procedury. V moderním světě jsou hlavním kritériem pro jakoukoli populární aplikaci vysoký výkon, konzistence dat a opětovné použití. Dávkové zpracování i uložené procedury hrají při implementaci těchto funkcí velmi důležitou roli. Znalost těchto znalostí je nevyhnutelná pro každého softwarového inženýra.
Doporučené čtení
- Výukový program Java JDBC: Co je JDBC (Java Database Connectivity)
- Výukový program pro připojení Java JDBC s příkladem programování
- Správa transakcí Java JDBC s příkladem
- JDBC ResultSet: Jak používat sadu Java ResultSet k načtení dat
- Zpracování výjimek JDBC - Jak zacházet s výjimkami SQL
- JDBC DriverManager, JDBC PreparedStatement And Statement
- Výukový program JAVA pro začátečníky: 100+ praktických výukových programů Java Video