java jdbc connection tutorial with programming example
Цей підручник з підключення JDBC пояснює основні кроки до бази даних із прикладами та надає рядки підключення JDBC для різних баз даних:
як боротися зі складними ситуаціями
У попередньому навчальному посібнику з Серія підручників JDBC , ми вивчили компоненти, архітектуру та типи драйверів у Java Database Connectivity (JDBC).
У цьому підручнику ми обговоримо кроки для підключення до баз даних за допомогою JDBC. Цей підручник покаже вам, як виконувати підключення JDBC та виконувати операції з базою даних. JDBC API виступає як інтерфейс між програмою Java та базою даних.
Наприкінці цього підручника ви зможете писати програми Java для підключення до баз даних та виконання операцій з БД.
Що ви дізнаєтесь:
Кроки підключення JDBC
Є 6 основних кроків для підключення до JDBC. Вони вказані на зображенні нижче:
# 1) Імпорт пакетів
По-перше, нам потрібно імпортувати існуючі пакети, щоб використовувати його в нашій програмі Java. Імпорт гарантує, що для програми доступні класи JDBC API. Потім ми можемо використовувати класи та підкласи пакетів.
Незалежно від драйвера JDBC, додайте наступну заяву про імпорт у програму Java.
import java.sql.*;
Імпортуйте інші класи на основі функціональних можливостей, які ви будете використовувати в програмі. Завантажте відповідні файли Jar для бази даних, яку ви будете використовувати в програмі.
Зверніться до попередній підручник для посилань для завантаження файлів Jar для вашої бази даних.
JDBC API 4.0 в основному забезпечує 2 важливі пакети:
- java.sql
- javax.sql
(i) пакет java.sql
Цей пакет надає класи та інтерфейси для виконання більшості функцій JDBC, таких як створення та виконання SQL-запитів.
Класи / Інтерфейси | Опис |
---|---|
DriverManager | Він надає базову послугу для управління набором драйверів JDBC |
BLOB | Він представляє значення SQL Blob у програмі Java |
CallableStatement | Він використовується для виконання збережених процедур SQL |
КЛОБ | Він представляє значення SQL Clob у програмі Java |
Підключення | Він створює зв’язок (сеанс) із певною базою даних |
Дата | Він забезпечує підтримку типу SQL Date |
Водій | Він створює екземпляр драйвера за допомогою Driver Manager |
ParameterMetaData | Це об’єкт, за допомогою якого можна отримати інформацію про типи та властивості кожного параметра в об’єкті PreparedStatement |
ПідготовленоЗаява | Він використовується для створення та виконання параметризованого запиту в програмі Java |
ResultSet | Він використовується для доступу до результату по рядках |
ResultSetMetaData | Він використовується для отримання інформації про типи та властивості стовпців у об’єкті ResultSet |
Ідентифікатор рядка | Він представляє значення SQL ROWID |
Savepoint | Він представляє точку збереження в транзакції |
SQLData | Він використовується для зіставлення визначеного користувачем типу SQL (UDT) класу в програмі Java |
SQLXML | Він представляє тип SQL XML |
Заява | Він використовується для виконання статичного оператора SQL |
DriverPropertyInfo | Він надає властивості драйвера для встановлення з'єднання |
SQLException | Він надає інформацію про помилки бази даних |
SQLTimeoutException | Це підклас SQLException, викинутий після закінчення часу очікування, зазначеного в інструкції |
Попередження про SQL | Це виняток, який надає інформацію про попередження про доступ до бази даних |
Структура | Це стандартне відображення в програмі Java для структурованого типу SQL |
(ii) пакет javax.sql
Це API розширення JDBC і забезпечує доступ та обробку даних на стороні сервера в програмі Java.
Класи / Інтерфейси | Опис |
---|---|
ConnectionEvent | Він надає інформацію про виникнення подій, пов’язаних із підключенням |
CommonDataSource | Це інтерфейс, який визначає методи, загальні між DataSource, XADataSource і ConnectionPoolDataSource |
ConnectionPoolDataSource | Це фабрика об’єктів PooledConnection |
Джерело даних | Це фабрика для підключень до фізичного DataSource, який представляє об'єкт |
PooledConnection | Він використовується для управління пулом з'єднань |
RowSet | Він надає підтримку JDBC API для Java-компонентної моделі компонентної моделі |
RowSetMetadata | Він містить інформацію про стовпці в об'єкті RowSet |
ConnectionEventListener | Він використовується для реєстрації подій об’єкта PooledConnection |
RowSetEvent | Він генерується, коли подія відбувається з об’єктом Rowset |
StatementEvent | Він надсилається всім StatementEventListeners, які були зареєстровані згенерованим PooledConnection |
# 2) Драйвер завантаження
По-перше, нам слід завантажити / зареєструвати драйвер у програмі перед підключенням до бази даних. Вам потрібно зареєструвати його лише один раз для кожної бази даних у програмі.
Ми можемо завантажити драйвер наступними двома способами:
- Class.forName ()
- DriverManager.registerDriver ()
(i) Class.forName ()
Таким чином, файл класу драйвера завантажується в пам’ять під час виконання. Це неявно завантажує драйвер. Під час завантаження драйвер автоматично реєструється в JDBC.
Ім'я БД | Ім'я драйвера JDBC |
---|---|
Sybase | com.sybase.jdbcSybDriver |
MySQL | com.mysql.jdbc.Driver |
Oracle | oracle.jdbc.driver.OracleDriver |
Microsoft SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
MS Access | net.ucanaccess.jdbc.UcanaccessDriver |
PostgreSQL | org.postgresql.Driver |
IBM DB2 | com.ibm.db2.jdbc.net.DB2Driver |
TeraData | com.teradata.jdbc.TeraDriver |
Примітка: Метод forName () дійсний лише для віртуальних машин, сумісних з JDK.
(ii) DriverManager.registerDriver ()
DriverManager - це вбудований клас, який доступний у пакеті java.sql. Він виступає посередником між додатком Java та базою даних, яку потрібно з'єднати. Перед підключенням до бази даних потрібно зареєструвати драйвер у DriverManager. Основною функцією DriverManager є завантаження класу драйверів бази даних і створення зв’язку з БД.
Публічний статичний порожній реєстрДрайвер (драйвер) - Цей метод реєструє драйвер у диспетчері драйверів. Якщо водій вже зареєстрований, він не вживатиме жодних дій.
- Кине SQLException якщо виникає помилка бази даних.
- Кине NullPointerException якщо драйвер нульовий.
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()) DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver())
Таким чином, ви можете зареєструвати драйвер для своєї бази даних, передавши його як параметр.
# 3) Встановіть зв’язок
Після завантаження драйвера наступним кроком є створення та встановлення з'єднання. Коли потрібно, пакети імпортуються, а драйвери завантажуються та реєструються, тоді ми можемо перейти до встановлення з'єднання з базою даних.
Клас DriverManager має метод getConnection, ми будемо використовувати цей метод для встановлення з'єднання з базою даних. Щоб викликати метод getConnection (), нам потрібно передати 3 параметри. 3 параметрами є URL-адреса типу даних рядка, ім’я користувача та пароль для доступу до бази даних.
Метод getConnection () - це перевантажений метод. 2 методи:
- getConnection (URL, ім'я користувача, пароль); - Він має 3 параметри URL, ім’я користувача, пароль.
- getConnection (URL); - Він має лише один параметр. URL також має ім’я користувача та пароль.
У наступній таблиці перелічені рядки з'єднання JDBC для різних баз даних:
База даних | Рядок підключення / URL-адреса БД |
---|---|
Sybase | jdbc: Sybase: Tds: HOSTNAME: PORT / DATABASE_NAME |
MySQL | jdbc: mysql: // HOST_NAME: PORT / DATABASE_NAME |
Oracle | jdbc: oracle: тонкий: @HOST_NAME: PORT: SERVICE_NAME |
Microsoft SQL Server | jdbc: sqlserver: // HOST_NAME: PORT; Ім'я бази даних = |
MS Access | jdbc: ucanaccess: // DATABASE_PATH |
PostgreSQL | jdbc: postgresql: // HOST_NAME: PORT / DATABASE_NAME |
IBM DB2 | jdbc: db2: // ІМЯ ХОСТА: ПОРТ / БАЗА ДАНИХ |
TeraData | jdbc: teradata: // HOSTNAME / database =, tmode = ANSI, charset = UTF8 |
Приклад:
Connection con = DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:xe,System,Pass123@)
Ось у цьому прикладі,
- тонкий відноситься до типу драйвера.
- localhost тут працює база даних Oracle.
- 1521 рік номер порту для підключення до БД.
- транспортного засобу - SID
- Система - Ім'я користувача для підключення до бази даних Oracle.
- Pass123 @ - Пароль
# 4) Створення та виконання заяви
Після встановлення зв’язку ми можемо взаємодіяти з підключеною базою даних. Спочатку нам потрібно створити оператор для виконання запиту SQL, а потім виконати оператор.
(i) Створити заяву
Тепер ми створимо об’єкт оператора, який запускає запит із підключеною базою даних. Ми використовуємо метод createStatement з Підключення клас для створення запиту.
У пакеті java.sql доступні 3 інтерфейси операторів. Вони пояснюються нижче:
заява
Цей інтерфейс використовується для реалізації простих операторів SQL без параметрів. Він повертає об'єкт ResultSet.
Statement statemnt1 = conn.createStatement();
б) Підготовлена заява
Цей інтерфейс PreparedStatement розширює інтерфейс Statement. Отже, він має більше можливостей, ніж інтерфейс Statement. Він використовується для реалізації параметризованих та попередньо скомпільованих операторів SQL. Продуктивність програми зростає, оскільки вона компілює запит лише один раз.
Цей інтерфейс легко використовувати повторно з новим параметром. Він підтримує параметр IN. Навіть ми можемо використовувати це твердження без будь-якого параметра.
String select_query = “Select * from states where state_id = 1”; PreparedStatement prpstmt = conn.prepareStatement(select_query);
в) CallableStatement
Інтерфейс CallableStatement розширює інтерфейс PreparedStatement. Отже, він має більше можливостей, ніж інтерфейс PreparedStatement. Він використовується для реалізації параметризованого оператора SQL, який викликає процедуру або функцію в базі даних. Збережена процедура працює як метод або функція в класі. Він підтримує параметри IN та OUT.
Екземпляр CallableStatement створюється шляхом виклику методу prepaCall об'єкта Connection.
CallableStatementcallStmt = con.prepareCall('{call procedures(?,?)}');
(ii) Виконайте запит
Існує 4 важливих методи для виконання запиту в інтерфейсі Statement. Вони пояснюються нижче:
- ResultSet executeQuery (рядок sql)
- int executeUpdate (рядок sql)
- логічне виконання (рядок sql)
- int () executeBatch ()
а) ResultSet executeQuery (рядок sql)
Метод executeQuery () в інтерфейсі Statement використовується для виконання запиту SQL та отримання значень з БД. Він повертає об'єкт ResultSet. Зазвичай ми використовуємо цей метод для запиту SELECT.
б) executeUpdate (рядок sql)
Метод executeUpdate () використовується для виконання запитів, визначених значеннями, таких як INSERT, UPDATE, DELETE (оператори DML) або DDL, які нічого не повертають. Здебільшого ми будемо використовувати цей метод для вставки та оновлення.
в) виконати (рядок sql)
Метод execute () використовується для виконання запиту SQL. Воно повертається правда якщо він виконує запит SELECT. І воно повертається помилковий якщо він виконує запит INSERT або UPDATE.
г) executeBatch ()
Цей метод використовується для виконання партії запитів SQL до бази даних, і якщо всі запити виконуються успішно, він повертає масив підрахунків оновлень. Ми використаємо цей метод, щоб вставити / оновити основну частину записів.
# 5) Отримати результати
Коли ми виконуємо запити за допомогою методу executeQuery (), результат зберігатиметься в об'єкті ResultSet. Повернутий об'єкт ResultSet ніколи не буде нульовим, навіть якщо у таблиці немає відповідного запису. Об'єкт ResultSet використовується для доступу до даних, отриманих з бази даних.
ResultSet rs 1= statemnt1.executeQuery(QUERY));
Ми можемо використати метод executeQuery () для запиту SELECT. Коли хтось намагається виконати запит на вставку / оновлення, він видасть SQLExecption із повідомленням “ Метод executeQuery не можна використовувати для оновлення '.
Об'єкт ResultSet вказує на поточний рядок у наборі результатів. Щоб повторити дані в об’єкті ResultSet, викличте метод next () через цикл while. Якщо більше немає записів для читання, він поверне FALSE.
ResultSet також можна використовувати для оновлення даних у БД. Ми можемо отримати дані з ResultSet, використовуючи такі методи отримання, як getInt (), getString (), getDate (). Нам потрібно передати індекс стовпця або ім'я стовпця як параметр, щоб отримати значення за допомогою методів Getter.
Ми дізнаємось більше про ResultSet у наступному уроці.
# 6) Тісне з’єднання
Нарешті, ми закінчили маніпулювати даними в БД. Тепер ми можемо закрити з'єднання JDBC. Нам потрібно переконатися, що ми закрили ресурс після того, як використали його. Якщо ми не закриємо їх належним чином, ми можемо закінчити зв’язки.
Коли ми закриваємо об'єкт з'єднання, об'єкти Statement та ResultSet автоматично закриваються.
conn.close();
Починаючи з Java 7, ми можемо автоматично закрити з'єднання JDBC за допомогою блоку try-catch. Підключення JDBC слід відкрити в дужках блоку try. Усередині блоку try ви можете виконувати підключення до бази даних як зазвичай.
Як тільки виконання вийде з блоку try, воно автоматично розірве з'єднання. У цьому випадку нам не потрібно розривати зв’язок, викликаючи метод conn.close у програмі Java.
try(Connection conn = DriverManager.getConnection(url, user, password)) { //database connection and operation }
Приклад підключення Java JDBC
У цьому прикладі ви побачите, як реалізувати 6 основних кроків для підключення до бази даних за допомогою JDBC у програмі Java.
хороші веб-сайти для перегляду аніме безкоштовно
Створити таблицю
До цього спочатку створіть одну таблицю та додайте до неї кілька записів.
Нижче наведено запит SQL для створення таблиці.
create table employee_details (empNum number(10), lastName varchar(50), firstName varchar(50), email varchar(255) , deptNum number(10), salary number(10));
Створив таблицю “worker_details” у базі даних Oracle.
Вставте дані в таблицю
Використовуючи наведені нижче запити, вставте дані в таблицю “worker_details”.
insert into employee_details values (1001, 'Luther', 'Martin', 'ml@gmail.com', 1, 13000); insert into employee_details values (1002, 'Murray', 'Keith', 'km@gmail.com', 2, 25000); insert into employee_details values (1003, 'Branson', 'John', 'jb@gmail.com', 3, 15000); insert into employee_details values (1004, 'Martin', 'Richard', 'rm@gmail.com', 4, 16000); insert into employee_details values (1005, 'Hickman', 'David', 'dh@gmail.com', 5, 17000);
Програма Java
Завантажте файл JDBC jar та імпортуйте його в проект Java.
package com.STH.JDBC; // import sql package to use it in our program import java.sql.*; public class Sample_JDBC_Program { public static void main(String() args) throws ClassNotFoundException, SQLException { // store the SQL statement in a string String QUERY = 'select * from employee_details'; //register the oracle driver with DriverManager Class.forName('oracle.jdbc.driver.OracleDriver'); //Here we have used Java 8 so opening the connection in try statement try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); //Created statement and execute it ResultSet rs1 = statemnt1.executeQuery(QUERY); { //Get the values of the record using while loop while(rs1.next()) { int empNum = rs1.getInt('empNum'); String lastName = rs1.getString('lastName'); String firstName = rs1.getString('firstName'); String email = rs1.getString('email'); String deptNum = rs1.getString('deptNum'); String salary = rs1.getString('salary'); //store the values which are retrieved using ResultSet and print it System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); } } } catch (SQLException e) { //If exception occurs catch it and exit the program e.printStackTrace(); } } }
Вихід:
Ключові моменти, на які слід звернути увагу:
- По-перше, нам потрібно імпортувати пакети, які ми будемо використовувати в нашій програмі Java для з'єднання JDBC. Тож ми можемо використовувати класи, підкласи та інтерфейси в пакетах.
- Нам потрібно зареєструвати або завантажити драйвер у DriverManager перед встановленням з'єднання.
- Після реєстрації драйвера ми можемо встановити з'єднання та виконати операції.
- За допомогою інтерфейсу оператора ми можемо створювати та виконувати запит SQL. Для простого запиту SQL ми можемо використовувати інтерфейс Statement. Для вставки / оновлення / видалення ми можемо використовувати інтерфейс PreparedStatement.
- Після виконання оператора результати зберігатимуться в об'єкті ResultSet. Ми отримуємо результати від об’єкта ResultSet, використовуючи метод next () для більш ніж 1 запису.
- Закінчивши роботу з базою даних, нам потрібно розірвати з'єднання. Так що ресурс буде доступний для користування іншими.
Часті запитання
Q # 1) Які основні кроки для підключення до БД в Java?
Відповідь: Існує 6 основних кроків для підключення до БД у Java.
Вони є:
- Імпорт-пакет
- Драйвер навантаження
- Встановіть зв’язок
- Створити та виконати оператор
- Отримати результати
- Закрийте з'єднання
Запитання №2) Яка різниця між типами даних BLOB та CLOB у JDBC?
Відповідь:
BLOB використовується для зберігання двійкового типу даних. Розмір сховища може змінюватися залежно від баз даних Приклад: зображення, голос, відео.
КЛОБ використовується для зберігання даних типу символів. Як і CLOB, простір для зберігання може змінюватися залежно від БД. Приклад: файлів.
Q # 3) Який метод класу DriverManager використовується для встановлення зв'язку з БД?
Відповідь: Клас DriverManager має метод getConnection (), який використовується для встановлення з'єднання з БД.
Q # 4) Яка різниця між Class.forName () та DriverManager.registerDriver ()?
Відповідь: Class.forName () - Спочатку він завантажує драйвер у пам’ять, а потім реєструє відповідний драйвер у диспетчері драйверів. Потім він створить об'єкт драйвера для здійснення з'єднання JDBC. Він завантажить драйвер явно.
DriverManager.registerDriver () - Він неявно реєструє драйвер.
Q # 5) Що таке витік з'єднання?
Відповідь: Ця ситуація виникає, коли з’єднання відкрито, а ви його не закрили. Якщо є блок коду, який відкриває зв’язок і не розриває зв’язок. Щоразу, коли цей блок коду виконується, підключення буде просочуватися з пулу підключень.
Як тільки всі доступні підключення просочаться, підключення буде недоступне, і програма зависне. Наскільки важливо відкрити з'єднання, наскільки важливо закрити з'єднання.
Q # 6) Чи обов’язково розривати зв’язок?
Відповідь: Якщо ви використовуєте версії Java нижче 7, вам потрібно закрити з'єднання вручну.
З версій вище Java 7 ми можемо автоматично закрити підключення, відкривши код підключення JDBC у дужках блоку try. Як тільки програма вийде з блоку try, вона автоматично розірве з'єднання.
Висновок
У цьому підручнику ми обговорили, як встановити з'єднання JDBC. Тепер ви можете виконувати операції з DB за допомогою JDBC у програмі Java. Ми вивчили 6 основних кроків для підключення до бази даних. Нам потрібно імпортувати пакети з нашої програми Java, щоб використовувати її.
Після реєстрації драйвера ми зможемо встановити зв’язок. Ми можемо створити та виконати оператор SQL за допомогою інтерфейсу Statement та отримати результати в об’єкті ResultSet. Як останній крок, ми повинні закрити зв’язок.
Рекомендована література
- Підручник з Java JDBC: Що таке JDBC (підключення до бази даних Java)
- Інтерфейс Java та підручник з абстрактних класів із прикладами
- Управління транзакціями Java JDBC на прикладі
- JDBC DriverManager, JDBC PreparedStatement and Statement
- JDBC ResultSet: Як використовувати Java ResultSet для отримання даних
- Підручник JAVA для початківців: 100+ практичних навчальних посібників Java
- Вступ до мови програмування Java - Підручник з відео
- Тестування бази даних селену (за допомогою WebDriver та JDBC API)