Керівництво по 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.

Схожі статті