English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Результаты JDBC (ResultSet)

SQL-запросы для чтения данных из базы данных возвращают данные в результатном наборе. SELECT-запрос — это стандартный метод для выбора строк из базы данных и их просмотра в результатном наборе. Интерфейс Sql.ResultSet представляет результатный набор запроса базы данных.

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

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

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

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

  • Метод Update:Используется для обновления данных в текущей строке всех столбцов. Затем обновление также может быть выполнено в базовом数据库е.

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

JDBC предоставляет следующие методы подключения для создания предложений с необходимым результатным набором-

  • createStatement(int RSType, int RSConcurrency);

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

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

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

Тип результатного набора

Возможные значения RSType приведены ниже. Если вы не укажете ningún tipo de 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 есть несколько методов, связанных с перемещением курсора, включая -

НомерМетоды и описание
1public void beforeFirst() throws SQLException

Переместите курсор перед первой строкой.

2public void afterLast() throws SQLException

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

3public boolean first() throws SQLException

Переместите курсор в первую строку.

4public void last() throws SQLException

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

5public boolean absolute(int row) throws SQLException

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

6public boolean relative(int row) throws SQLException

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

7public boolean previous() throws SQLException

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

8public boolean next() throws SQLException

Переместите курсор на следующую строку. Если в наборе результатов нет более строк, то该方法 возвращает false.

9public int getRow() throws SQLException

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

10public void moveToInsertRow() throws SQLException

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

11public void moveToCurrentRow() throws SQLException

Если курсор в настоящее время находится в строке вставки, курсор вернется к текущей строке; в противном случае该方法 не выполнится

Чтобы лучше понять, давайте рассмотрим “Навигация - Пример кода.

Просмотрите набор результатов

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

У каждого возможного типа данных есть метод get, у каждого метода get есть две версии-

  • Столбец с именем столбца.

  • Индекс с индексом столбца.

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

НомерМетоды и описание
1public int getInt(String columnName) throws SQLException

Возвращает целое число в текущем ряду по указанному имени столбца.

2public int getInt(int columnIndex) throws SQLException

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

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

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

Чтобы лучше понять, давайте рассмотримПросмотрите - Пример кода.

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

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

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

  • Столбец с именем столбца.

  • Индекс с индексом столбца.

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

НомерМетоды и описание
1public void updateString(int columnIndex, String s) throws SQLException

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

2public void updateString(String columnName, String s) throws SQLException

Как и предыдущие методы, но столбцы определяются по имени, а не по индексу.

В пакете java.sql есть восемь原始ных типов данных, а также методы обновления String, Object, URL и типов данных SQL.

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

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

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

2public void deleteRow()

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

3public void refreshRow()

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

4public void cancelRowUpdates()

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

5public void insertRow()

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

Чтобы лучше понять, давайте рассмотрим “Обновить пример кода.