English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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. | Курсор может скроллить вперед и назад, и результатный набор очень чувствителен к изменениям в базе данных, которые делают другие люди после создания результатного набора. |
Возможные 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 есть несколько методов, связанных с перемещением курсора, включая -
Номер | Методы и описание |
---|---|
1 | public void beforeFirst() throws SQLException Переместите курсор перед первой строкой. |
2 | public void afterLast() throws SQLException Переместите курсор после последней строки. |
3 | public boolean first() throws SQLException Переместите курсор в первую строку. |
4 | public void last() throws SQLException Переместите курсор в последнюю строку. |
5 | public boolean absolute(int row) throws SQLException Переместите курсор на указанную строку. |
6 | public boolean relative(int row) throws SQLException Переместите курсор на заданное количество строк вперед или назад от текущей позиции. |
7 | public boolean previous() throws SQLException Переместите курсор на предыдущую строку. Если предыдущая строка не находится в наборе результатов, то该方法 возвращает false. |
8 | public boolean next() throws SQLException Переместите курсор на следующую строку. Если в наборе результатов нет более строк, то该方法 возвращает false. |
9 | public int getRow() throws SQLException Возвращает номер строки, на которую указывает курсор. |
10 | public void moveToInsertRow() throws SQLException Перемещает курсор к особому ряду в наборе результатов, который можно использовать для вставки новой строки в базу данных. Запомните текущее положение курсора. |
11 | public void moveToCurrentRow() throws SQLException Если курсор в настоящее время находится в строке вставки, курсор вернется к текущей строке; в противном случае该方法 не выполнится |
Чтобы лучше понять, давайте рассмотрим “Навигация - Пример кода.
Интерфейс ResultSet содержит множество методов для получения данных из текущего ряда.
У каждого возможного типа данных есть метод get, у каждого метода get есть две версии-
Столбец с именем столбца.
Индекс с индексом столбца.
Например, если интересующий вас столбец содержит целое число, вам нужно использовать один из методов getInt() ResultSet.
Номер | Методы и описание |
---|---|
1 | public int getInt(String columnName) throws SQLException Возвращает целое число в текущем ряду по указанному имени столбца. |
2 | public 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() ниже-
Номер | Методы и описание |
---|---|
1 | public void updateString(int columnIndex, String s) throws SQLException Изменить значение String в указанном столбце на значение s. |
2 | public void updateString(String columnName, String s) throws SQLException Как и предыдущие методы, но столбцы определяются по имени, а не по индексу. |
В пакете java.sql есть восемь原始ных типов данных, а также методы обновления String, Object, URL и типов данных SQL.
Обновление строки в ResultSet изменяет столбцы текущей строки в объекте ResultSet, но не изменяет строку в базовом数据库е. Чтобы обновить изменения в строке базы данных, вам нужно вызвать один из следующих методов.
Номер | Методы и описание |
---|---|
1 | public void updateRow() Обновить текущую строку, обновив соответствующую строку в базе данных. |
2 | public void deleteRow() Удалить текущую строку из базы данных. |
3 | public void refreshRow() Обновить данные в ResultSet, чтобы отразить последние изменения в базе данных. |
4 | public void cancelRowUpdates() Отменить все изменения, сделанные в текущей строке. |
5 | public void insertRow() Вставка строки в базу данных. Этот метод можно вызвать только когда курсор указывает на строку, которую нужно вставить. |
Чтобы лучше понять, давайте рассмотрим “Обновить пример кода.