Jdbc resultset і rowset, easyjava

Jdbc resultset і rowset, easyjava

Jdbc resultset і rowset, easyjava
Бази даних все таки про дані, а не про запити. У JDBC дані, які повертають запити, представлені у вигляді об'єктів ResultSet.

ResultSet. в свою чергу, жорстко пов'язаний з Statement. який його породив і існує тільки до моменту закриття цього самого Statement або навіть раніше, до виконання нового запиту в Statement.

Для доступу до даних інтерфейс ResultSet реалізує суміш шаблонів Итератор і Курсор: всередині ResultSet є покажчик, який вказує на яку-небудь рядок (або навіть не на рядок, а в нікуди) в даних. Цей покажчик можна пересувати програмно і запитувати дані зі стовпців поточного рядка. За замовчуванням курсор ResultSet знаходиться перед першим рядком набору даних.

Існує цілих вісім методів, які переміщують курсор по ResultSet:

  • next () - переміщує курсор на один рядок вперед. Повертає true. якщо переміщення вдалося і false. якщо курсор вже знаходиться за останнім рядком.
  • previous () - очевидно, антонім next (). Переміщує курсорс на один рядок назад і теж повертає true. якщо переміщення вдалося і false. якщо курсор знаходиться перед першим рядком.
  • first () і last () - переміщують курсор відповідно на першу і останню рядок набору даних. У разі, якщо набір даних порожній, повертають false. У разі успішного переміщення повертають true.
  • beforeFirst () і afterLast () - переміщують курсор на позицію перед першим рядком або після останнього рядка.
  • relative () - переміщує курсор на вказане число рядків від поточної позиції.
  • absolute () - переміщує курсор на вказане число рядків від першої позиції.

Варто зазначити, що не всі ці методи завжди працюють. ResultSet (а точніше конкретна його реалізація драйвером JDBC) може не підтримувати переміщення крім як вперед. Такий ResultSet називається TYPE_FORWARD_ONLY. У разі, якщо переміщення можливе, відкритий ResultSet може стежити за змінами в базі даних, що відбулися після його відкриття або не стежити. У першому випадку це буде TYPE_SCROLL_SENSITIVE ResultSet. у другому TYPE_SCROLL_INSENSITIVE.

Читати з ResultSet дещо не інтуїтивно, але порівняно просто: переміщаємо курсор в потрібні рядки і запитуємо вміст стовпців.