Учебники

JDBC — наборы результатов

Операторы SQL, которые читают данные из запроса к базе данных, возвращают данные в наборе результатов. Оператор SELECT является стандартным способом выбора строк из базы данных и просмотра их в наборе результатов. Интерфейс java.sql.ResultSet представляет набор результатов запроса к базе данных.

Объект ResultSet поддерживает курсор, который указывает на текущую строку в наборе результатов. Термин «набор результатов» относится к данным строки и столбца, содержащимся в объекте ResultSet.

Методы интерфейса ResultSet можно разделить на три категории:

  • Навигационные методы: используются для перемещения курсора.

  • Методы получения: используется для просмотра данных в столбцах текущей строки, на которые указывает курсор.

  • Способы обновления: используются для обновления данных в столбцах текущей строки. Затем обновления могут быть обновлены в базовой базе данных.

Навигационные методы: используются для перемещения курсора.

Методы получения: используется для просмотра данных в столбцах текущей строки, на которые указывает курсор.

Способы обновления: используются для обновления данных в столбцах текущей строки. Затем обновления могут быть обновлены в базовой базе данных.

Курсор является подвижным в зависимости от свойств ResultSet. Эти свойства назначаются при создании соответствующего оператора, который генерирует ResultSet.

JDBC предоставляет следующие методы подключения для создания операторов с требуемым ResultSet —

  • createStatement (int RSType, int RSConcurrency);

  • prepareStatement (String SQL, int RSType, int RSConcurrency);

  • prepareCall (String sql, int RSType, int RSConcurrency);

createStatement (int RSType, int RSConcurrency);

prepareStatement (String SQL, int RSType, int RSConcurrency);

prepareCall (String sql, int RSType, int RSConcurrency);

Первый аргумент указывает тип объекта ResultSet, а второй аргумент является одной из двух констант ResultSet для указания того, является ли результирующий набор доступным только для чтения или обновляемым.

Тип ResultSet

Возможные RSType приведены ниже. Если вы не укажете какой-либо тип ResultSet, вы автоматически получите тип TYPE_FORWARD_ONLY.

Тип Описание
ResultSet.TYPE_FORWARD_ONLY Курсор может двигаться только вперед в наборе результатов.
ResultSet.TYPE_SCROLL_INSENSITIVE Курсор может прокручиваться вперед и назад, и набор результатов не чувствителен к изменениям, внесенным другими в базу данных, которые происходят после создания набора результатов.
ResultSet.TYPE_SCROLL_SENSITIVE. Курсор может прокручиваться вперед и назад, и набор результатов чувствителен к изменениям, внесенным другими в базу данных, которые происходят после создания набора результатов.

Параллельность ResultSet

Возможные RSConcurrency приведены ниже. Если вы не укажете какой-либо тип параллелизма, вы автоматически получите тип CONCUR_READ_ONLY.

совпадение Описание
ResultSet.CONCUR_READ_ONLY Создает набор результатов только для чтения. Это по умолчанию
ResultSet.CONCUR_UPDATABLE Создает обновляемый набор результатов.

Все наши примеры, написанные до сих пор, могут быть написаны следующим образом, который инициализирует объект Statement для создания объекта ResultSet только для чтения и только для чтения —

try {
   Statement stmt = conn.createStatement(
                           ResultSet.TYPE_FORWARD_ONLY,
                           ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
   ....
}
finally {
   ....
}

Навигация по результирующему набору

В интерфейсе ResultSet есть несколько методов, которые включают перемещение курсора, в том числе —

SN Методы и описание
1 public void beforeFirst () выдает SQLException

Перемещает курсор непосредственно перед первым рядом.

2 public void afterLast () выбрасывает SQLException

Перемещает курсор сразу после последней строки.

3 public boolean first () выдает SQLException

Перемещает курсор на первый ряд.

4 public void last () выбрасывает SQLException

Перемещает курсор в последнюю строку.

5 публичный логический абсолютный (int row) выдает SQLException

Перемещает курсор в указанную строку.

6 публичный логический родственник (int row) выдает SQLException

Перемещает курсор на указанное количество строк вперед или назад от того места, на которое он в данный момент указывает.

7 public boolean previous () выдает SQLException

Перемещает курсор в предыдущую строку. Этот метод возвращает false, если предыдущая строка не соответствует результирующему набору.

8 public boolean next () выдает SQLException

Перемещает курсор на следующую строку. Этот метод возвращает false, если в наборе результатов больше нет строк.

9 public int getRow () выдает SQLException

Возвращает номер строки, на которую указывает курсор.

10 public void moveToInsertRow () выбрасывает SQLException

Перемещает курсор на специальную строку в наборе результатов, которую можно использовать для вставки новой строки в базу данных. Текущее положение курсора запоминается.

11 public void moveToCurrentRow () выбрасывает SQLException

Перемещает курсор назад к текущей строке, если курсор в данный момент находится на строке вставки; в противном случае этот метод ничего не делает

Перемещает курсор непосредственно перед первым рядом.

Перемещает курсор сразу после последней строки.

Перемещает курсор на первый ряд.

Перемещает курсор в последнюю строку.

Перемещает курсор в указанную строку.

Перемещает курсор на указанное количество строк вперед или назад от того места, на которое он в данный момент указывает.

Перемещает курсор в предыдущую строку. Этот метод возвращает false, если предыдущая строка не соответствует результирующему набору.

Перемещает курсор на следующую строку. Этот метод возвращает false, если в наборе результатов больше нет строк.

Возвращает номер строки, на которую указывает курсор.

Перемещает курсор на специальную строку в наборе результатов, которую можно использовать для вставки новой строки в базу данных. Текущее положение курсора запоминается.

Перемещает курсор назад к текущей строке, если курсор в данный момент находится на строке вставки; в противном случае этот метод ничего не делает

Для лучшего понимания давайте изучим Navigate — Пример кода .

Просмотр результирующего набора

Интерфейс ResultSet содержит десятки методов для получения данных текущей строки.

Существует метод get для каждого из возможных типов данных, и каждый метод get имеет две версии:

  • Тот, который принимает имя столбца.

  • Тот, который принимает в индекс столбца.

Тот, который принимает имя столбца.

Тот, который принимает в индекс столбца.

Например, если интересующий вас столбец содержит int, вам нужно использовать один из методов getInt () ResultSet —

SN Методы и описание
1 public int getInt (String columnName) выдает SQLException

Возвращает int в текущей строке в столбце с именем columnName.

2 public int getInt (int columnIndex) выбрасывает SQLException

Возвращает int в текущей строке в указанном индексе столбца. Индекс столбца начинается с 1, что означает, что первый столбец строки равен 1, второй столбец строки равен 2 и т. Д.

Возвращает int в текущей строке в столбце с именем columnName.

Возвращает int в текущей строке в указанном индексе столбца. Индекс столбца начинается с 1, что означает, что первый столбец строки равен 1, второй столбец строки равен 2 и т. Д.

Аналогично, в интерфейсе ResultSet есть методы get для каждого из восьми типов примитивов Java, а также распространенные типы, такие как java.lang.String, java.lang.Object и java.net.URL.

Существуют также методы для получения типов данных SQL java.sql.Date, java.sql.Time, java.sql.TimeStamp, java.sql.Clob и java.sql.Blob. Проверьте документацию для получения дополнительной информации об использовании этих типов данных SQL.

Для лучшего понимания давайте изучим Просмотр — Пример кода .

Обновление результирующего набора

Интерфейс ResultSet содержит набор методов обновления для обновления данных набора результатов.

Как и в случае с методами get, для каждого типа данных есть два метода обновления:

  • Тот, который принимает имя столбца.

  • Тот, который принимает в индекс столбца.

Тот, который принимает имя столбца.

Тот, который принимает в индекс столбца.

Например, чтобы обновить столбец String текущей строки набора результатов, вы должны использовать один из следующих методов updateString () —

SN Методы и описание
1 public void updateString (int columnIndex, String s) выдает SQLException

Изменяет строку в указанном столбце на значение s.

2 public void updateString (String columnName, String s) выбрасывает SQLException

Аналогичен предыдущему методу, за исключением того, что столбец указывается по имени, а не по индексу.

Изменяет строку в указанном столбце на значение s.

Аналогичен предыдущему методу, за исключением того, что столбец указывается по имени, а не по индексу.

Существуют методы обновления для восьми примитивных типов данных, а также типов данных String, Object, URL и SQL в пакете java.sql.

Обновление строки в наборе результатов изменяет столбцы текущей строки в объекте ResultSet, но не в базовой базе данных. Чтобы обновить ваши изменения строки в базе данных, вам нужно вызвать один из следующих методов.

SN Методы и описание
1 public void updateRow ()

Обновляет текущую строку, обновляя соответствующую строку в базе данных.

2 public void deleteRow ()

Удаляет текущую строку из базы данных

3 public void refreshRow ()

Обновляет данные в наборе результатов, чтобы отразить любые недавние изменения в базе данных.

4 public void cancelRowUpdates ()

Отменяет любые обновления, сделанные в текущей строке.

5 public void insertRow ()

Вставляет строку в базу данных. Этот метод может быть вызван только тогда, когда курсор указывает на строку вставки.

Обновляет текущую строку, обновляя соответствующую строку в базе данных.

Удаляет текущую строку из базы данных

Обновляет данные в наборе результатов, чтобы отразить любые недавние изменения в базе данных.

Отменяет любые обновления, сделанные в текущей строке.

Вставляет строку в базу данных. Этот метод может быть вызван только тогда, когда курсор указывает на строку вставки.

Для лучшего понимания давайте изучим пример обновления кода .