jdbc batch processing
Овај водич пружа потпуно разумевање ЈДБЦ скупне обраде и Јава похрањене процедуре са примерима Јава примера:
У Руковање изузецима ЈДБЦ туториал оф ЈДБЦ туториал сериес , научили смо начине за руковање СКЛ изузецима уз помоћ примера програмирања.
У овом упутству ћемо размотрити методе за групну обраду на Јави помоћу ЈДБЦ управљачког програма. Такође ћемо научити како да креирамо ускладиштене процедуре и позовемо их из Јава програма.
Почнимо са разумевањем серијске обраде и њених предности.
Шта ћете научити:
ЈДБЦ групна обрада
То је поступак извршавања неколико СКЛ израза у једној трансакцији. Овај процес смањује време комуникације и повећава перформансе. Пуно олакшава обраду велике количине података.
Предности шаржне обраде
Групна обрада има за циљ побољшање перформанси и доследности података.
Перформансе
Размотрите сценарио у којем треба додати више (рецимо 5) уноса у табелу из ЈАВА програма. Директан приступ биће отварање везе са базом података, писање ИНСЕРТ упита и извршавање сваког упита помоћу Статемент-а или ПрепаредСтатемент-а.
Овај приступ ће повећати мрежна путовања у базу података и као резултат, довести ће до лоших перформанси. Коришћењем групне обраде ову операцију можемо извршити у једном позиву.
Доследност података
У неким случајевима морамо да убацимо / ажурирамо податке у више табела. То ће довести до међусобно повезане трансакције у којој је важан редослед упита који се убацују или ажурирају. Свака грешка која се догоди током извршавања резултирала би враћањем података убачених претходним упитима, ако их има.
Пример:
# 1) Табела „ЕМПЛОИЕЕ_ДЕТАИЛС“ има 3 колоне: ИД , Име , и Улога запосленог.
statement.execute('INSERT INTO EMPLOYEE_DETAILS(ID, NAME, ROLE) ' + 'VALUES ('1','EMPLOYEE_NAME1','ROLE1')');
#два) Табела „ЕМПЛОИЕЕ_АДДРЕСС“ има 2 колоне: ЕМП ИД и Адреса
statement.execute('INSERT INTO EMPLOYEE_ADDRESS( EMP_ID, ADDRESS) ' + 'VALUES ('1','ADDRESS1')');
У горњем примеру се може појавити проблем када се прва наредба успешно изврши, али друга наредба не успе. У овој ситуацији нема враћања података уметнутих првом изјавом. То доводи до недоследности података.
Доследност података можемо постићи тако што ћемо извршити трансакцију на крају или извршити враћање у случају било каквих изузетака. Али, да би се то постигло, ДБ мора бити погођен више пута за сваку изјаву.
С друге стране, у групној обради, подаци ће се извршити тек када се успешно изврше сви упити унутар серије. У супротном, неће.
Како извршити серијску обраду
Можемо извршити групну обраду методама аддбатцх () и екецутеБатцх () које су доступне и у класама Статемент и ПрепаредСтатемент.
У овом упутству сви програми су написани на Јави. Користили смо верзију Јава 8 и Орацле ДБ.
=> Кликните овде да бисте преузели Орацле софтвер
=> Кликните овде да бисте преузели Јава верзију 8
У следећем примеру видећемо како се детаљно врши серијска обрада. Има корак-по-корак процеса инсталације Јаве.
Подаци у табели ЗАПОСЛЕНИ пре уметања података:
који је најбољи сервер е-поште
Јава Програм
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();} } }
ИЗЛАЗ:
Подаци у табели ЗАПОСЛЕНИ након уметања података:
Објашњење:
У горњи програм убацили смо податке о 3 запослена у једном позиву помоћу групне операције.
- Направите један упит за уметање да бисте проследили вредности колона.
- Отворите везу и креирајте објект припремљеног стања помоћу објекта повезивања и позовите методу припремаСтатемент.
- Затим подесите вредности за 1стзапосленог помоћу метода сетКСКСКС и позовите методу аддБатцх () да бисте додали нови ред у пакет.
- Овако додајте вредности за 2нди 3рдзапослени. Након додавања упита у методу аддБатцх (), требали бисмо позвати методу екецутеБатцх () користећи припремљени објект СтатеСтатемент.
- метода екецутеБатцх () убацује податке о 3 запослена у један позив.
- Проверите табелу ЗАПОСЛЕНИ да ли су подаци правилно уметнути или не.
Јава похрањене процедуре
Похрањена процедура је група СКЛ израза који чине једну целину и изводе одређени задатак. Они ће се користити за обављање низа операција или питања за извршавање на серверу базе података. Може се саставити и извршити са различитим параметрима и резултатима.
Свака процедура има свој јединствени назив на који се позива. Ова подпрограмска јединица се чува као објект базе података у ДБ-у.
Подпрограм није ништа друго до процедура и треба га ручно креирати како желимо и сачувати као ДБ објекат.
Похрањене процедуре су самостални блокови програма које можемо сачувати у ДБ. Користећи име сачуване процедуре, можемо га позвати и извршити. Углавном се користи за извршавање процеса у ПЛ / СКЛ. Процедура може имати угнежђене блокове или може бити угнежђена унутар осталих блокова.
Похрањена процедура има 3 дела:
- Декларацијски део (опционално): У овом делу можемо прогласити променљиве, константе, показиваче итд. То је необавезни део. На основу захтева, можемо га користити.
- Извршни део: Овај део садржи главну пословну логику поступка. Обично ће имати блок СКЛ израза.
- Изузетан део за руковање (опционално): У овом делу можемо да се позабавимо изузетком који се може догодити због кода дела извршења. Такође је необавезна.
На основу захтева можемо створити процедуру. Вредности можемо да проследимо или преузмемо из параметара.
У меморисаним процедурама доступне су три врсте параметара. Су:
- ИН: Користи се за прослеђивање улазне вредности сачуваној процедури. Похрањена процедура ће користити улазни параметар у програму као променљиву само за читање. Вредност се не може променити унутар потпрограма. Орацле користи ИН као задани режим параметра. То је задати параметар.
- ОУТ: Користи се за враћање или добијање вредности из ускладиштене процедуре након извршења. То је променљива за читање и писање унутар потпрограма. Вредност се може мењати унутар потпрограма.
- УЛАЗ / ИЗЛАЗ: Користи се за прослеђивање улазних вредности сачуваној процедури и враћање или добијање вредности такође из процедуре. Читав је и за писање. Можемо га читати и мењати.
ПОВРАТАК
Користићемо кључну реч ретурн да вратимо контролу главном програму, као што је Јава програм. Када процедура пронађе кључну реч РЕТУРН, изаћи ће из извршења и прескочити код или израз након ње.
Како назвати сачувану процедуру са Јаве
У Јава-и имамо интерфејс ЦаллаблеСтатемент за позивање Сторед Процедуре. Објекат интерфејса ЦаллаблеСтатемент може се креирати методом препаЦалл () интерфејса Цоннецтион, а након тога би требало да позовемо методу екецутеКуери () да извршимо Похрањену процедуру у програму Јава.
Пре писања Јава програма за примену овога, требали бисмо створити ускладиштене процедуре да бисмо их користили у програму.
Следи синтакса позивања сачуваних процедура у програму Јава:
Синтакса | Број параметара |
---|---|
{позовите ПРОЦЕДУРЕ_НАМЕ ()} | Нема улазних параметара и нема излазних параметара |
{позвати ПРОЦЕДУРЕ_НАМЕ (?,?,?)} | Три улазна параметра и нема излазних параметара |
{? = позвати ПРОЦЕДУРЕ_НАМЕ ()} | Нема улазних параметара и један излазни параметар (РЕТУРН вредност) |
{? = позвати ПРОЦЕДУРЕ_НАМЕ (?,?)} | Два улазна параметра и један излазни параметар (РЕТУРН Валуе) |
Кораци за стварање похрањених процедура
# 1) Креирајте процедуру на ДБ серверу. Овде користимо Орацле ДБ.
# 2) Синтакса за стварање целокупне процедуре:
Сачувану процедуру можемо написати и у Јава коду.
# 3) Прођите параметре ИН и ОУТ да бисте их користили у процедури.
# 4) Треба поменути кључну реч АС / ИС. Ако у нову процедуру додајемо другу процедуру, користите кључну реч ИС или АС кључну реч ако је процедура самостална.
# 5) Изјавите да променљиве нису обавезне на основу захтева које можемо створити.
како тестирате веб услуге
# 6) Затим ЗАПОЧНИТЕ процедуру помоћу кључне речи БЕГИН, а затим напишите СКЛ изразе или упите који ће се извршити у процедури.
# 7) Даље, изузетак можемо решити у делу Изузетак. Такође није обавезно помињати.
# 8) Завршите процедуру помињањем кључне речи ЕНД и назива процедуре.
Можемо створити процедуру у програму Орацле и сачувати је са јединственим именом и позвати је из Јава програма. Можемо створити процедуру и позвати је на Јава.
Креирајте процедуру у програму Орацле, сачувајте је и позовите процедуру у програму Јава.
# 1) Отворите сервер базе података. Овде користимо Орацле ДБ сервер.
#два) Кликните десним тастером миша на фасциклу Процедура и кликните на опцију Нова процедура.
# 3) Затражиће назив поступка и детаље параметара.
Белешка: Детаље о параметру можемо дати и током писања поступка.
# 4) Напишите процедуру користећи кораке о којима смо већ говорили у овом упутству и сачувајте процедуру са јединственим именом.
Процедура на снимку екрана ће приказати излаз у ДБ. Можемо га променити тако да се приказује и у програму Јава. За то треба да користимо ОУТ параметре.
# 5) Покрените поступак кликом на дугме за покретање
# 6) Унесите вредност у колону Улазна вредност. Приказаће податке за задату вредност.
До сада смо видели како да креирамо и извршимо процедуру у самој ДБ конзоли.
Креирајте процедуру у ДБ. Позовите га и прикажите податке у Јава конзоли .
Направите следећи поступак користећи горње кораке и сачувајте га са именом „ДИСПЛАИ_ЕМПЛОИЕЕ_ДЕТАИЛС“.
Пример програма ускладиштене Јава процедуре
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(); } } }
ИЗЛАЗ:
Објашњење:
У горе наведеном програму смо направили једну процедуру и сачували је у Орацле ДБ. Затим је позвао ту процедуру помоћу ЦаллаблеСтатемент и приказао податке у Јава конзоли.
- Креирајте процедуру и сачувајте је у Орацле ДБ.
- У програму Јава отворите ДБ везу и позовите метод препаЦалл помоћу објеката везе и ЦаллаблеСтатемент.
- Проследите вредност улазног параметра помоћу методе сетКСКСКС.
- Дохватите вредности излазних параметара помоћу методе регистерОутПараметер. У овој методи требали бисмо прослиједити вриједност индекса параметра и тип података параметра. Похраниће вредности у индекс параметара.
- Помоћу метода гетКСКСКС можемо да преузмемо податке и прикажемо их у Јава конзоли.
Креирајте процедуру и извршите је у самом програму Јава.
Јава Програм
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(); } } }
ИЗЛАЗ:
Подаци у табели Емплоиее_детаилс пре извршења програма:
Подаци у табели Емплоиее_детаилс након извршења програма:
Објашњење:
У горе наведеном програму, код поступка чувамо као низ.
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;
';
- Отворите Орацле ДБ Цоннецтион и креирајте објект израза помоћу објекта повезивања.
- Позовите методу цреатеСтатемент помоћу објекта наредбе, јер креирамо процедуру у Јава коду.
- Позовите процедуру користећи синтаксу {позвати УПД_ЕМПЛОИЕЕ_ДЕТАИЛС (?,?) за припрему ЦаллЦалл методе ЦаллаблеСтатемент.
- Будући да креирамо процедуру у Јава коду, морамо извршити ону „Направи шифру процедуре“.
- Да бисте извршили ту процедуру, позовите методу извршења помоћу објекта Статемент “ стмт.екецуте (Сторед_Процедуре) ”. Ово ће створити процедуру привремено у ДБ-у.
- Обим поступка је крај извршења програма. После тога неће бити доступан. Користећи методе сетКСКСКС, поставите вредности које ће се ажурирати у табели Емплоиее_Детаилс.
- Позовите методу екецутеУпдате помоћу објекта цаллаблеСтатемент. Ова метода ће ажурирати вредности у причи Емпоиее_Детаилс.
- Проверите табелу Емплоиее_детаилс да ли су подаци исправно ажурирани.
Тачке које треба запамтити:
- Групна обрада побољшава перформансе и одржава конзистентност података.
- Извршење неколико СКЛ израза у једној трансакцији познато је под називом Скупна обрада.
- Похрањена процедура је блок СКЛ израза који се користи за извођење пословне логике.
- Улазни параметар можемо проследити помоћу кључне речи ИН у процедуру и кључну реч ОУТ за излазни параметар.
- Можемо створити процедуру на самом ДБ серверу и привремено користећи Јава код.
Често постављана питања
П # 1) Који интерфејс треба користити за обављање групне обраде у ЈДБЦ?
Одговор: Јава пакет има Статемент и ПрепаредСтатемент интерфејсе, који пружају методе за групну обраду.
П # 2) Како серијска ажурирања раде у ЈДБЦ?
Одговор: Скупно ажурирање ЈДБЦ је гомила исправки груписаних и послатих у базу података у једном потезу, уместо да се ажурирања шаљу појединачно. Дакле, смањује мрежни промет у бази података.
П # 3) Како серијска обрада повећава перформансе?
Одговор: Групна обрада шаље податке у базу података одједном (само 1 повратно путовање) уместо да их шаље један по један, а база података ће можда моћи паралелно да извршава неке изјаве. Овако, повећава перформансе апликације и штеди време.
П # 4) Који су параметри прихваћени у ускладиштеним процедурама у ЈДБЦ?
Одговор: Постоје три врсте параметара - ИН, ОУТ и ИНОУТ параметри. Параметар ИН је да се добије улазна вредност. Параметар ОУТ служи за преузимање излазне вредности. Параметар ИНОУТ се користи и за улаз и за излаз.
П # 5) Које су методе доступне за извршавање сачуване процедуре у ЈДБЦ?
Одговор: Коришћењем интерфејса ЦаллаблеСтатемент можемо позвати процедуру. Интерфејс ЦаллаблеСтатемент пружа три методе за извршавање сачуваних процедура.
Три методе су:
- екецутеУпдате (): Користите овај метод ако процедура не враћа повратне вредности.
- екецутеКуери (): Користите ову методу ако процедура враћа само један скуп резултата.
- екецуте (): Користите ову методу ако процедура враћа мноштво скупова резултата или непознати број скупова резултата.
Закључак
У овом упутству смо обрадили серијску обраду и ускладиштене процедуре. У савременом свету, високе перформансе, доследност података и употребљивост су модне речи за било коју популарну апликацију. И серијска обрада и ускладиштене процедуре играју веома важну улогу у примени ових карактеристика. Знање о њима неизбежно је за сваког софтверског инжењера.
Препоручено читање
- Јава ЈДБЦ лекција: Шта је ЈДБЦ (повезивање Јава базе података)
- Водич за Јава ЈДБЦ повезивање са примером програмирања
- Јава ЈДБЦ управљање трансакцијама са примером
- ЈДБЦ РесултСет: Како користити Јава РесултСет за преузимање података
- Руковање изузецима ЈДБЦ - Како се рукује СКЛ изузецима
- ЈДБЦ ДриверМанагер, ЈДБЦ ПрепаредСтатемент анд Статемент
- Водич за ЈАВА за почетнике: 100+ практичних Јава видео водича