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

Conjunto de Resultados JDBC (ResultSet)

As instruções SQL que leem dados de uma consulta de banco de dados retornam os dados do conjunto de resultados. A instrução SELECT é o método padrão para escolher linhas do banco de dados e vê-las no conjunto de resultados. A interface Sql.ResultSet representa o conjunto de resultados da consulta de banco de dados.

O objeto ResultSet mantém um cursor apontando para a linha atual do conjunto de resultados. O termo 'conjunto de resultados (result set)' se refere às linhas e colunas de dados contidas no objeto ResultSet.

Os métodos do ResultSet podem ser divididos em três categorias-

  • Métodos de navegação: Usado para mover o cursor para a esquerda e para a direita.

  • Método Get: Usado para visualizar os dados das colunas da linha atual apontada pelo cursor.

  • Método de atualização:Usado para atualizar os dados de cada coluna da linha atual. Em seguida, a atualização também pode ser feita no banco de dados básico.

O cursor pode se mover com base nas propriedades do ResultSet. Essas propriedades são especificadas ao criar o Statement correspondente que gera o ResultSet.

O JDBC fornece os seguintes métodos de conexão para criar instruções com o conjunto de resultados desejado-

  • createStatement(int RSType, int RSConcurrency);

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

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

O primeiro parâmetro representa o tipo do objeto ResultSet, o segundo parâmetro é uma das constantes ResultSet, usada para especificar se o conjunto de resultados é apenas leitura ou atualizável.

Tipo do conjunto de resultados

Os tipos possíveis de RSType estão conforme mostrado a seguir. Se você não especificar nenhum tipo de ResultSet, você obterá automaticamente um conjunto de resultados do tipo TYPE_FORWARD_ONLY.

TipoDescription
ResultSet.TYPE_FORWARD_ONLY

O cursor pode se mover apenas para frente no conjunto de resultados.

ResultSet.TYPE_SCROLL_INSENSITIVE

O cursor pode ser rolado para frente e para trás e o conjunto de resultados não é sensível às alterações feitas no banco de dados por outras pessoas após a criação do conjunto de resultados.

ResultSet.TYPE_SCROLL_SENSITIVE.

The cursor can scroll forward and backward, and the result set is very sensitive to changes made to the database by others after the result set was created.

Concurrency of ResultSet

Possible RSConcurrency is given below. If you do not specify any concurrency type, you will automatically obtain the CONCUR_READ_ONLY type.

ConcurrencyDescription
ResultSet.CONCUR_READ_ONLY

Create a read-only result set. This is the default value

ResultSet.CONCUR_UPDATABLE

Create an updatable result set.

So far, all the examples we have written can be written as follows, which initializes a Statement object to create a read-only ResultSet object-

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

Navigating the result set

There are several methods involving cursor movement in the ResultSet interface, including-

NúmeroMétodos e Descrições
1public void beforeFirst() throws SQLException

Move the cursor to the row before the first row.

2public void afterLast() throws SQLException

Move the cursor to the row after the last row.

3public boolean first() throws SQLException

Move the cursor to the first row.

4public void last() throws SQLException

Move the cursor to the last row.

5public boolean absolute(int row) throws SQLException

Move the cursor to the specified row.

6public boolean relative(int row) throws SQLException

Move the cursor forward or backward by the specified number of rows from its current position.

7public boolean previous() throws SQLException

Move the cursor to the previous row. If the previous row is not in the result set, this method returns false.

8public boolean next() throws SQLException

Move o cursor para a próxima linha. Se não houver mais linhas no conjunto de resultados, este método retorna false.

9public int getRow() throws SQLException

Retorna o número da linha apontada pelo cursor.

10public void moveToInsertRow() throws SQLException

Move o cursor para a linha especial no conjunto de resultados, que pode ser usada para inserir uma nova linha no banco de dados. Lembre-se da posição atual do cursor.

11public void moveToCurrentRow() throws SQLException

Se o cursor estiver atualmente na linha de inserção, move o cursor de volta para a linha atual; caso contrário, este método não executa nenhuma ação

Para entender melhor, vamos estudar “Navegação-Código de Exemplo.

Ver o conjunto de resultados

A interface ResultSet contém muitos métodos para obter os dados da linha atual

Cada tipo de dados possível tem um método get, cada método get tem duas versões-

  • Coluna com nome de coluna

  • Índice com índice de coluna

Por exemplo, se o campo de interesse para ver a coluna contiver um int, você precisará usar um dos métodos getInt() do ResultSet

NúmeroMétodos e Descrições
1public int getInt(String columnName) throws SQLException

Retorna o inteiro na linha atual da coluna nomeada columnName.

2public int getInt(int columnIndex) throws SQLException

Retorna o número inteiro na linha atual da coluna de índice especificada. O índice de coluna começa de1Começando, isso significa que a primeira coluna da linha é1e a segunda coluna da linha é2e assim por diante.

Da mesma forma, na interface ResultSet, para cada um dos oito tipos básicos Java e os tipos comuns (como java.lang.String, java.lang.Object e java.net.URL), há um método get.

Existem alguns métodos para obter os tipos de dados SQL java.sql.Date, java.sql.Time, java.sql.Timestamp, java.sql.Clob e java.sql.Blob. Consulte o documento para obter mais informações sobre o uso desses tipos de dados SQL.

Para entender melhor, vamos estudarVer-Exemplo de Código.

Atualizar o conjunto de resultados

A interface ResultSet contém uma coleção de métodos de atualização usados para atualizar os dados do conjunto de resultados

Como no método get, cada tipo de dados tem dois métodos de atualização-

  • Coluna com nome de coluna

  • Índice com índice de coluna

Por exemplo, para atualizar a coluna String da linha atual do conjunto de resultados, você pode usar um dos métodos updateString() abaixo-

NúmeroMétodos e Descrições
1public void updateString(int columnIndex, String s) throws SQLException

Mudar o valor da String na coluna especificada para o valor de s.

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

Similar aos métodos anteriores, apenas as colunas são especificadas pelo nome em vez de pelo índice.

O pacote java.sql contém oito tipos de dados originais e métodos de atualização para String, Object, URL e tipos de dados SQL.

Atualizar uma linha no conjunto de resultados mudará as colunas da linha atual no objeto ResultSet, mas não a linha no banco de dados básico. Para atualizar as alterações na linha do banco de dados, você precisa chamar um dos seguintes métodos.

NúmeroMétodos e Descrições
1public void updateRow()

Atualizar a linha atual atualizando a linha correspondente no banco de dados.

2public void deleteRow()

Excluir a linha atual do banco de dados.

3public void refreshRow()

Atualizar os dados no conjunto de resultados para refletir as alterações mais recentes no banco de dados.

4public void cancelRowUpdates()

Cancelar qualquer atualização feita na linha atual.

5public void insertRow()

Inserir uma linha no banco de dados. Este método pode ser chamado apenas quando o cursor estiver apontando para a linha de inserção.

Para entender melhor, vamos estudar “Atualizar Código de Exemplo.