
- •7.05010301, 8.05010301 - "Програмне забезпечення систем”
- •7.05010302, 8.05010302 - "Інженерія програмного забезпечення”
- •1. Вступ
- •2. Мета та завдання
- •3. Завдання на курсову роботу
- •4. Склад, обсяг і структура курсової роботи
- •5.1. Класи
- •5.1.1. Розширення класу
- •5.2. Абстрактні класи
- •5.3. Інтерфейси
- •6. Робота із реляційними базами даних
- •4. Виконання запиту
- •5. Обробка результатів
- •6. Закриття з’єднання
- •6.3. Пул з’єднань
6. Робота із реляційними базами даних
Робота із реляційними базами даних за допомогою мови SQL у java базується на технології JDBC (Java Database Connectivity) – галузевий стандарт для впровадження незалежного зв’язку між мовою Java та базами даних. JDBC надає користувачу об’єктно-орієнтований програмний інтерфейс для з’єднання з БД, виконання SQL запитів та отримання результатів їх виконання. Загальні класи JDBC знаходяться у пакетах java.sql та javaх.sql. Крім них до проекту необхідно додати архів із класами (JDBC - драйверами), які реалізують з’єднання та роботу із конкретною СКБД. Їх найчастіше можна знайти на сайті розробника СКБД.
6.1. Робота із базовими функціями
Послідовність дій при використанні JDBC така:
Завантаження класу драйвера бази даних.
Починаючи з версії JDBC 4.0 драйвер автоматично завантажується на кроці 2, тобто при виклику метода getConnection() классу DriverManager.
Приклад:
String driverName = "org.gjt.mm.mysql.Driver";//для СКБД MySQL
або
Class.forName("org.gjt.mm.mysql.Driver");
2. Встановленняз’єднання
Для встановлення з’єднання з базою даних потрібно викликати статичний метод getConnection() классу DriverManager, куди як параметри передаються URL БД, що складається з типу й адреси знаходження бази, логін та пароль користувача БД.
Приклад:
Connection conn = (Connection) DriverManager.getConnection( "jdbc:mysql://127.0.0.1:3306/first_db" , "root" , "password" );
3. Створення об’єкта для передачі запитів
Об’єкт з’єднання має перевантажені методи createStatement() та prepareStatement(). Перший призначений для виконання запитів без параметрів, другий – для виконання параметризованих запитів. Параметризовані запити доцільно використовувати, якщо очікується значна кількість схожих запитів, які відрізняються деяким параметром, наприклад, ідентифікатором. При цьому запит на сервері БД компілюватиметься лише один раз і у відкомпільованому вигляді зберігатиметься в кеші на сервері БД. При виконанні подальших схожих запитів, повторної компіляції не відбуватиметься, а просто буде знаходитись відкомпільований запит у кеші та виконуватися із новими параметрами.
Приклад:
Statement query = сonn.createStatement();
PreparedStatement prepQuery = myConnection.prepareStatement(
"select * from student where course = ?" );
4. Виконання запиту
Якщо використовувався об’єкт типу Statement, то виконання запиту здійснюється за допомогою метода executeQuery(). Результатом є об’єкт ResultSet, який фактично є ітератором, що дозволяє отримати результати запиту. Для виконання параметризованого запиту необхідно передати параметри. Для цього у об’єкту типу PreparedStatement є набір методів (setInt(), setString(), setDate() тощо). Коли параметри задано, то теж викликається метод executeQuery().
Приклад:
ResultSet rs = query.executeQuery("select * from student");
prepQuery. setInt(1,4);
ResultSet result = prepQuery.executeQuery();
Для виконання запитів, які не повертають результату використовується метод executeUpdate(). Якщо виконувалась sql-команда INSERT, то можна отримати значення штучного ідентифікатора, згенерованого СУБД за допомогою метода getGeneratedKeys().
Приклад:
PreparedStatement query=myConnection.prepareStatement("insert into student (name , course) values ( ? , ? )" , Statement.RETURN_GENERATED_KEYS);
query.setString(1, "Petrenko") ;
query.setInt(2, 4 );
query.executeUpdate();
ResultSet rs = query.getGeneratedKeys();
if( rs.next() ){
System.out.println( "Serial value for inserted record "+rs.getInt(1) ); ;
}