jdbc batch processing
Цей посібник надає повне розуміння пакетної обробки JDBC та збереженої процедури Java із зразками прикладів Java:
В Обробка винятків JDBC підручник з Серія підручників JDBC , ми вивчили способи обробки винятків SQL за допомогою прикладів програмування.
У цьому посібнику ми обговоримо методи пакетної обробки на Java за допомогою драйвера JDBC. Ми також дізнаємося про те, як створювати збережені процедури та викликати їх із програми Java.
Почнемо з розуміння пакетної обробки та її переваг.
Що ви дізнаєтесь:
Пакетна обробка JDBC
Це процес виконання декількох операторів SQL за одну транзакцію. Цей процес скорочує час спілкування та підвищує продуктивність. Це значно полегшує обробку великого обсягу даних.
Переваги пакетної обробки
Пакетна обробка спрямована на підвищення продуктивності та узгодженості даних.
Продуктивність
Розглянемо сценарій, коли до таблиці із програми JAVA потрібно додати кілька (скажімо, 5) записів. Прямим підходом буде відкриття підключення до бази даних, написання запитів INSERT та виконання кожного запиту за допомогою Statement або PreparedStatement.
Такий підхід збільшить мережеві поїздки до бази даних і, як результат, призведе до низької продуктивності. За допомогою пакетної обробки ми можемо виконати цю операцію за один дзвінок.
Послідовність даних
У деяких випадках нам потрібно вставляти / оновлювати дані в декількох таблицях. Це призведе до взаємопов’язаної транзакції, де послідовність запитів, що вставляються або оновлюються, є важливою. Будь-які помилки, що виникають під час виконання, призведуть до відкоту даних, вставлених попередніми запитами, якщо такі є.
Приклад:
# 1) Таблиця 'EMPLOYEE_DETAILS' має 3 стовпці: Посвідчення особи , Ім'я , і Роль працівника.
statement.execute('INSERT INTO EMPLOYEE_DETAILS(ID, NAME, ROLE) ' + 'VALUES ('1','EMPLOYEE_NAME1','ROLE1')');
# два) Таблиця 'EMPLOYEE_ADDRESS' має 2 стовпці: Ідентифікатор EMP і Адреса
statement.execute('INSERT INTO EMPLOYEE_ADDRESS( EMP_ID, ADDRESS) ' + 'VALUES ('1','ADDRESS1')');
У наведеному вище прикладі може виникнути проблема, коли перший оператор виконується успішно, але другий оператор не вдається. У цій ситуації немає відкоту даних, вставлених першим оператором. Це призводить до невідповідності даних.
Ми можемо досягти узгодженості даних, здійснивши транзакцію в кінці або виконавши відкат у випадку будь-яких винятків. Але для того, щоб досягти цього, БД потрібно повторно натискати для кожного висловлювання.
З іншого боку, при пакетній обробці дані будуть фіксуватися лише тоді, коли всі запити всередині пакета виконуються успішно. Інакше не буде.
Як виконувати пакетну обробку
Ми можемо виконувати пакетну обробку за допомогою методів addbatch () та executeBatch (), які доступні як у класах Statement, так і у PreparedStatement.
У цьому посібнику всі програми написані на Java. Ми використовували версію Java 8 та Oracle DB.
=> Клацніть тут, щоб завантажити програмне забезпечення Oracle
=> Клацніть тут, щоб завантажити версію Java 8
У наступному прикладі ми побачимо, як складно виконати пакетну обробку. Він має покроковий процес встановлення Java.
Дані в таблиці EMPLOYEE перед вставкою даних:
найкращий безкоштовний конвертер DVD в AVI - -
Програма 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();} } }
ВИХІД:
Дані в таблиці EMPLOYEE після вставки даних:
Пояснення:
У вищезазначеній програмі ми вставили дані 3 співробітників за один дзвінок за допомогою пакетної операції.
- Створіть один запит на вставку для передачі значень стовпців.
- Відкрийте з'єднання та створіть об'єкт PreparedStatement за допомогою об'єкта з'єднання та викличте метод prepaStatement.
- Потім встановіть значення для 1вулспівробітник, який використовує методи setXXX і викликає метод addBatch (), щоб додати новий рядок у пакеті.
- Ось так, додайте значення для 2йта 3рдслужбовців. Після додавання запитів до методу addBatch () нам слід викликати метод executeBatch (), використовуючи об'єкт PreparedStatement.
- Метод executeBatch () вставляє 3 дані працівника в один виклик.
- Перевірте таблицю EMPLOYEE, чи правильно введені дані чи ні.
Процедури, що зберігаються на Java
Збережена процедура - це група операторів SQL, які утворюють єдину одиницю та виконують конкретне завдання. Вони будуть використовуватися для виконання набору операцій або питань для виконання на сервері бази даних. Його можна скомпілювати та виконати з різними параметрами та результатами.
Кожна процедура має свою унікальну назву, на яку потрібно посилатись. Цей блок підпрограми зберігається як об'єкт бази даних у БД.
Підпрограма - це не що інше, як процедура, і її слід створювати вручну, як хочемо, і зберігати як об’єкт БД.
Збережені процедури - це окремі блоки програми, які ми можемо зберігати в БД. Використовуючи ім'я збереженої процедури, ми можемо викликати та виконувати її. В основному він використовується для виконання процесу в PL / SQL. Процедура може мати вкладені блоки або може бути вкладена всередині інших блоків.
Зберігається процедура складається з 3 частин:
- Частина декларації (необов’язково): У цій частині ми можемо оголосити змінні, константи, курсори тощо. Це необов’язкова частина. Виходячи з вимог, ми можемо ним користуватися.
- Частина виконання: Ця частина містить основну ділову логіку процедури. Зазвичай він матиме блок операторів SQL.
- Виняткова керована частина (додатково): У цій частині ми можемо обробити виняток, який може статися через код частини виконання. Це також необов’язково.
Виходячи з вимог, ми можемо створити процедуру. Ми можемо передавати або отримувати значення з параметрів.
У збережених процедурах доступні три типи параметрів. Вони є:
- В: Він використовується для передачі вхідного значення збереженій процедурі. Збережена процедура використовуватиме вхідний параметр у програмі як змінну лише для читання. Значення не можна змінити всередині підпрограм. Oracle використовує IN як режим за замовчуванням параметра. Це параметр за замовчуванням.
- ВИХІД: Він використовується для повернення або отримання значення із збереженої процедури після виконання. Це змінна читання-запису всередині підпрограм. Значення можна змінювати всередині підпрограм.
- IN OUT: Він використовується для передачі вхідних значень збереженій процедурі та повернення або отримання значень із процедури. Це як для читання, так і для запису. Ми можемо читати та модифікувати це.
ПОВЕРНЕННЯ
Ми використаємо ключове слово return, щоб повернути керування головній програмі, такій як програма Java. Коли процедура знайде ключове слово RETURN, вона вийде з виконання та пропустить код або оператор після нього.
Як викликати збережену процедуру з Java
У нас є інтерфейс CallableStatement на Java для виклику збереженої процедури. Об'єкт інтерфейсу CallableStatement можна створити, використовуючи метод prepaCall () інтерфейсу Connection, і після цього ми повинні викликати метод executeQuery () для виконання збереженої процедури в програмі Java.
Перш ніж писати програму Java для реалізації цього, нам слід створити збережені процедури, щоб використовувати її в програмі.
Нижче наведено синтаксис виклику збережених процедур у програмі Java:
Синтаксис | Кількість параметрів |
---|---|
{зателефонувати PROCEDURE_NAME ()} | Немає вхідних параметрів і немає вихідних параметрів |
{зателефонувати PROCEDURE_NAME (?,?,?)} | Три вхідні параметри та відсутні вихідні параметри |
{? = зателефонувати PROCEDURE_NAME ()} | Немає вхідних параметрів і один вихідний параметр (значення RETURN) |
{? = зателефонувати PROCEDURE_NAME (?,?)} | Два вхідні параметри та один вихідний параметр (значення RETURN) |
Кроки для створення збережених процедур
# 1) Створіть процедуру на сервері БД. Тут ми використовуємо Oracle DB.
# 2) Синтаксис для створення повної процедури:
Ми також можемо записати збережену процедуру в коді Java.
# 3) Передайте параметри IN та OUT, щоб використовувати їх у процедурі.
# 4) Слід зазначити ключове слово AS / IS. Якщо ми додаємо іншу процедуру в новій процедурі, використовуйте ключове слово IS або ще AS, якщо процедура автономна.
# 5) Заявіть про змінні, це не є обов’язковим, виходячи з вимоги, яку ми можемо створити.
# 6) Потім НАЧНІТЬ процедуру за допомогою ключового слова BEGIN, а потім напишіть оператори SQL або запити, які потрібно виконати в процедурі.
# 7) Далі ми можемо обробити виняток у частині Виняток. Це також не обов’язково згадувати.
# 8) Завершіть процедуру, згадавши ключове слово END та назву процедури.
Ми можемо створити процедуру в Oracle і зберегти її з унікальним іменем і викликати цю процедуру з програми Java. Ми можемо створити процедуру і також викликати цю процедуру на Java.
Створіть процедуру в Oracle, збережіть її і викличте процедуру в програмі Java.
# 1) Відкрийте сервер бази даних. Тут ми використовуємо сервер Oracle DB.
# два) Клацніть правою кнопкою миші на папці 'Процедура' та виберіть опцію 'Нова процедура'.
# 3) Він запитає назву процедури та деталі параметрів.
Примітка: Деталі параметрів ми можемо надати під час написання процедури.
# 4) Напишіть процедуру, використовуючи кроки, про які ми вже говорили в цьому посібнику, та збережіть процедуру з унікальним ім'ям.
Процедура на скріншоті відобразить вихідні дані в БД. Ми можемо змінити його для відображення у програмі Java. Для цього нам потрібно використовувати параметри OUT.
# 5) Запустіть процедуру, натиснувши кнопку запуску
# 6) Введіть значення у стовпці Вхідне значення. Він буде відображати дані для заданого значення.
До цього часу ми бачили, як створити та виконати процедуру в самій консолі БД.
Створіть процедуру в БД. Зателефонуйте йому та відображте дані на консолі Java .
Створіть наступну процедуру, використовуючи наведені вище кроки, та збережіть її з назвою “DISPLAY_EMPLOYEE_DETAILS”.
Приклад програми, що зберігається на 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(); } } }
ВИХІД:
Пояснення:
У наведеній вище програмі ми створили одну процедуру та зберегли її в БД Oracle. Потім викликав цю процедуру за допомогою CallableStatement і відобразив дані в Java Console.
- Створіть процедуру та збережіть її в Oracle DB.
- У програмі Java відкрийте підключення до БД і викличте метод prepaCall, використовуючи об'єкти з'єднання та CallableStatement.
- Передайте значення вхідного параметра, використовуючи метод setXXX.
- Отримати значення вихідних параметрів за допомогою методу registerOutParameter. У цьому методі ми повинні передавати значення індексу параметра та тип даних параметра. Він буде зберігати значення в індексі параметрів.
- За допомогою методів getXXX ми можемо отримати дані та відобразити їх на консолі Java.
Створіть процедуру та виконайте її в самій програмі Java.
Програма 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(); } } }
ВИХІД:
Дані в таблиці Employee_details перед виконанням програми:
Дані в таблиці Employee_details після виконання програми:
Пояснення:
У наведеній вище програмі ми зберігаємо код процедури як рядок.
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;
';
- Відкрийте Oracle DB Connection і створіть об'єкт оператора, використовуючи об'єкт з'єднання.
- Викличте метод createStatement, використовуючи об'єкт оператора, оскільки ми створюємо процедуру в коді Java.
- Викличте процедуру, використовуючи синтаксис {зателефонувати UPD_EMPLOYEE_DETAILS (?,?) для підготовки методу CallCallableStatement.
- Оскільки ми створюємо процедуру в коді Java, ми повинні виконати той 'Створити код процедури'.
- Щоб виконати цю процедуру, викликайте метод execute за допомогою об'єкта Statement “ stmt.execute (Stored_Procedure) '. Це створить процедуру тимчасово в БД.
- Обсяг процедури - закінчення виконання програми. Після цього він буде недоступний. За допомогою методів setXXX встановіть значення для оновлення в таблиці Employee_Details.
- Викличте метод executeUpdate за допомогою об'єкта callableStatement. Цей метод оновить значення в казці Empoyee_Details.
- Перевірте таблицю Employee_details, чи дані оновлено належним чином.
Потрібно пам’ятати:
- Пакетна обробка покращує продуктивність та підтримує узгодженість даних.
- Виконання декількох операторів SQL в одній транзакції називається пакетною обробкою.
- Збережена процедура - це блок операторів SQL, що використовується для виконання бізнес-логіки.
- Ми можемо передати вхідний параметр за допомогою ключового слова IN до процедури та ключового слова OUT для вихідного параметра.
- Ми можемо створити процедуру на самому сервері БД, тимчасово використовуючи також код Java.
Часті запитання
Q # 1) Який інтерфейс слід використовувати для пакетної обробки в JDBC?
Відповідь: Пакет Java має інтерфейси Statement та PreparedStatement, які забезпечують методи пакетної обробки.
Q # 2) Як пакетні оновлення працюють у JDBC?
Відповідь: Пакетне оновлення JDBC - це сукупність оновлень, згрупованих і надісланих до бази даних за один раз, а не надсилання оновлень по одному. Таким чином, це зменшує мережевий трафік в базі даних.
Q # 3) Як пакетна обробка підвищує продуктивність?
Відповідь: Пакетна обробка надсилає дані в Базу даних одночасно (лише 1 зворотний рейс), а не надсилає по одному, і База даних може виконувати деякі оператори паралельно. Отак, це збільшує продуктивність програми та економить час.
Q # 4) Які параметри приймаються у збережених процедурах у JDBC?
Відповідь: Існує три типи параметрів - параметри IN, OUT та INOUT. Параметр IN - це отримання вхідного значення. Параметр OUT призначений для отримання вихідного значення. Параметр INOUT використовується як для введення, так і для виводу.
Q # 5) Які методи доступні для виконання збереженої процедури в JDBC?
найкраще віддалене шпигунське програмне забезпечення для мобільних телефонів -
Відповідь: Використовуючи CallableStatement Interface, ми можемо викликати процедуру. Інтерфейс CallableStatement передбачає три методи для виконання збережених процедур.
Три методи:
- executeUpdate (): Використовуйте цей метод, якщо процедура не повертає жодних повернутих значень.
- executeQuery (): Використовуйте цей метод, якщо процедура повертає лише один набір результатів.
- execute (): Використовуйте цей метод, якщо процедура повертає багато наборів результатів або невідому кількість наборів результатів.
Висновок
У цьому посібнику ми розглянули пакетну обробку та збережені процедури. У сучасному світі висока продуктивність, узгодженість даних та багаторазове використання - це ключові слова для будь-якого популярного додатка. Як пакетна обробка, так і збережені процедури відіграють дуже важливу роль у реалізації цих функцій. Знання про них неминуче для кожного інженера-програміста.
Рекомендована література
- Підручник з Java JDBC: Що таке JDBC (підключення до бази даних Java)
- Підручник з підключення Java JDBC із прикладом програмування
- Управління транзакціями Java JDBC на прикладі
- JDBC ResultSet: Як використовувати Java ResultSet для отримання даних
- Обробка винятків JDBC - Як обробляти винятки SQL
- JDBC DriverManager, JDBC PreparedStatement and Statement
- Підручник JAVA для початківців: 100+ практичних відео-підручників Java