Керівництво по jdbc
У минулому уроці ми розглянули поняття Statements і їх види. Ми дізналися, що в результаті SQL - запиту ми отримуємо дані.
Дані, отримані в результаті SQL - запиту повертаються у вигляді множетсва результатів, які зберігаються по суті під назвою Result Set.
Інтерфейс java.sql.ResultSet є множетсво результатів, запиту в БД.
Примірник ResultSet має покажчик, який вказує на поточний рядок в отриманому безлічі.
Всі методи інтерфейсу java.sql.ResultSet ми можемо розділити на три великі групи:
Курсор рухається на основі властивостей ResultSet. Ці властивості вказуються при створенні екземпляра ResultSet.
Для орпедленія цих свойтсв використовуються наступні методи:
- createStatement (int RSType, int RSConcurrency);
- prepareStatement (String SQL, int RSType, int RSConcurrency);
- prepareCall (String SQL, int RSType, int RSConcurrency);
Аргумент RSType визначає тип ResultSet, а другий - визначає, чи використовується даний екземпляр ResultSet тільки для читання, або для читання і зміни також.
Можливі типи ResultSet наведені нижче. Тип TYPE_FORWARD_ONLY використовується за умовчанням.
Розглянемо ці типи:
- ResultSet.TYPE-FORWARD_ONLY
Покажчик рухається тільки вперед по безлічі отриманих результатів.
. - ResultSet.TYPE_SCROLL_INTENSIVE
Покажчик може рухатися вперед і назад і не чуствителен до змін в БД, які зроблені іншими користувачами після того, як ResultSet був створений. - ResultSet.TYPE_SCROLL_SENSITIVE
Покажчик може рухатися вперед і назад і чутливий до змін в БД, які зроблені іншими користувачами після того, як ResultSet був створений.
За замовчуванням RSConcurrency примірника ResultSet встановлений тип CONCUR_READ_ONLY, тобто тільки для читання.
Всього існує два типи цього параметра:
- ResultSet.CONCUR_READ_ONLY
Створює екземпляр ResultSet тільки для читання. Встановлюється за замовчуванням. - ResultSet.CONCUR_UPDATABLE
Створює екземпляр ResultSet, який може змінювати дані.
У вигляді коду, створення екземпляра ResultSet з необхідними нам параметрами виглядає, приблизно так:
Навігація по ResultSet
В інтерфейсі java.sql.ResultSet існує кілька методів для переміщення покажчика.
Деякі з них наведені нижче:
- public void beforeFirst () throws SQLException
Переміщує покажчик на місце перед першим рядом. - public void afterLast () throws SQLException
Переміщує покажчик на місце після крайнього ряду. - public boolean first () throws SQLException
Переміщує покажчик на перший ряд. - public boolean last () throws SQLException
Переміщує покажчик на крайній ряд. - public boolean previous () throws SQLException
Переміщує покажчик на попередній ряд. Повертає false. якщо попередній ряд знаходиться за межами безлічі результатів. - public boolean next () throws SQLException
Переміщує покажчик на наступний ряд. Повертає false. якщо наступний ряд знаходиться за межами безлічі результатів. - public void absolute (int row) throws SQLException
Переміщує покажчик на вказаний ряд. - public void relative (int row) throws SQLException
Переміщує покажчик на вказану кількість рядів від поточного - public int getRow () throws SQLException
Повертає номер ряду, на який в даний момент вказує курсор. - public void moveToInsertRow () throws SQLException
Переміщує покажчик на ряд в отриманому безлічі, який може бути використаний для того, щоб додати новий запис в БД. Поточне положення покажчика запам'ятовується. - public void moveToCurrentRow () throws SQLExcpetion
Повертає покажчик назад на поточний ряд в разі, якщо покажчик посилається на ряд, в який в даний момент додаються дані.
Для розуміння того, як це працює на практиці, розглянемо приклад простого додатка.
В результаті роботи програми ми отримаємо, наступний результат:
Для отримання і редагування даних, в інтерфейсу ResultSet існує безліч методів.
Ми можемо отримати дані, як по імені, так і індексу:
- public int getInt (int columnIndex) throws SQLException
Повертає номер поточного ряду з зазначеним індексом колонки. Індекси починаються з 1. Тобто перша - 1, друга - 2 і т.д. - public int getInt (String columnName) throws SQLException
Повертає ціле число в поточному ряду з колонкою з ім'ям, переданому в параметрі columnName.
Існують також методи для отримання певних типів даних SQL (java.sql.Time, java.sql.Date і т.д.).
Для розуміння того, як це працює на практиці, розглянемо наступний приклад.
В результаті роботи програми ми отримаємо наступний результат:
Редагування даних ResultSet
Для редагування даних, в інтерфейсі java.sql.ResultSet, також розроблено безліч методів.
Ми можемо змінювати дані, як по імені, так і за індексом колонки:
- public void updateString (int columnIndex, String s) throws SQLException
Змінює рядок у зазначеній колонці. - public void updateString (String columnName, String s) throws SQLException
Змінює рядок в колонці з вказаним ім'ям.
Ми також можемо працювати з рядами в таблиці БД:
- public void insertRow ()
Вставляє запис в таблицю БД. Може бути використаний лише в тому випадку, коли покажчик посилається на ряд для вставки. - public void updateRow ()
Змінює поточний ряд в таблиці БД. - public void deleteRow ()
Видаляє поточний ряд з таблиці БД.
Для розуміння того, як це працює на практиці, розглянемо такий приклад.
В результаті роботи програми ми отримаємо наступний результат:
У цьому уроці ми вивчили такий важливий елемент, як ResultSet, його методи, застосування і розглянули приклади додатків з його використанням.
У наступному уроці ми вивчимо типи даних JDBC.