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Методы и описание
1public void beforeFirst () выдает SQLExceptionПеремещает курсор непосредственно перед первым рядом.
2public void afterLast () выбрасывает SQLExceptionПеремещает курсор сразу после последней строки.
3public boolean first () выдает SQLExceptionПеремещает курсор на первый ряд.
4public void last () выбрасывает SQLExceptionПеремещает курсор в последнюю строку.
5публичный логический абсолютный (int row) выдает SQLExceptionПеремещает курсор в указанную строку.
6публичный логический родственник (int row) выдает SQLExceptionПеремещает курсор на указанное количество строк вперед или назад от того места, на которое он в данный момент указывает.
7public boolean previous () выдает SQLExceptionПеремещает курсор в предыдущую строку. Этот метод возвращает false, если предыдущая строка не соответствует результирующему набору.
8public boolean next () выдает SQLExceptionПеремещает курсор на следующую строку. Этот метод возвращает false, если в наборе результатов больше нет строк.
9public int getRow () выдает SQLExceptionВозвращает номер строки, на которую указывает курсор.
10public void moveToInsertRow () выбрасывает SQLExceptionПеремещает курсор на специальную строку в наборе результатов, которую можно использовать для вставки новой строки в базу данных. Текущее положение курсора запоминается.
11public void moveToCurrentRow () выбрасывает SQLExceptionПеремещает курсор назад к текущей строке, если курсор в данный момент находится на строке вставки; в противном случае этот метод ничего не делает

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

SNМетоды и описание
1public int getInt (String columnName) выдает SQLExceptionВозвращает int в текущей строке в столбце с именем columnName.
2public 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Методы и описание
1public void updateString (int columnIndex, String s) выдает SQLExceptionИзменяет строку в указанном столбце на значение s.
2public void updateString (String columnName, String s) выбрасывает SQLExceptionАналогичен предыдущему методу, за исключением того, что столбец указывается по имени, а не по индексу.

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

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

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

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

SNМетоды и описание
1public void updateRow ()Обновляет текущую строку, обновляя соответствующую строку в базе данных.
2public void deleteRow ()Удаляет текущую строку из базы данных
3public void refreshRow ()Обновляет данные в наборе результатов, чтобы отразить любые недавние изменения в базе данных.
4public void cancelRowUpdates ()Отменяет любые обновления, сделанные в текущей строке.
5public void insertRow ()Вставляет строку в базу данных. Этот метод может быть вызван только тогда, когда курсор указывает на строку вставки.

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

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

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

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

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

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


Поділитись