JDBC - Conjuntos de resultados
As instruções SQL que leem dados de uma consulta de banco de dados retornam os dados em um conjunto de resultados. A instrução SELECT é a maneira padrão de selecionar linhas de um banco de dados e visualizá-las em um conjunto de resultados. A interface java.sql.ResultSet representa o conjunto de resultados de uma consulta ao banco de dados.
Um objeto ResultSet mantém um cursor que aponta para a linha atual no conjunto de resultados. O termo "conjunto de resultados" refere-se aos dados de linha e coluna contidos em um objeto ResultSet.
Os métodos da interface ResultSet podem ser divididos em três categorias -
Navigational methods: Usado para mover o cursor.
Get methods: Usado para visualizar os dados nas colunas da linha atual apontada pelo cursor.
Update methods:Usado para atualizar os dados nas colunas da linha atual. As atualizações também podem ser atualizadas no banco de dados subjacente.
O cursor pode ser movido com base nas propriedades do ResultSet. Essas propriedades são designadas quando a declaração correspondente que gera o ResultSet é criada.
JDBC fornece os seguintes métodos de conexão para criar instruções com o ResultSet desejado -
createStatement(int RSType, int RSConcurrency);
prepareStatement(String SQL, int RSType, int RSConcurrency);
prepareCall(String sql, int RSType, int RSConcurrency);
O primeiro argumento indica o tipo de um objeto ResultSet e o segundo argumento é uma das duas constantes ResultSet para especificar se um conjunto de resultados é somente leitura ou atualizável.
Tipo de ResultSet
Os possíveis RSType são fornecidos abaixo. Se você não especificar nenhum tipo de ResultSet, obterá automaticamente um que é TYPE_FORWARD_ONLY.
Tipo | Descrição |
---|---|
ResultSet.TYPE_FORWARD_ONLY | O cursor só pode avançar no conjunto de resultados. |
ResultSet.TYPE_SCROLL_INSENSITIVE | O cursor pode rolar para frente e para trás, e o conjunto de resultados não é sensível às alterações feitas por outras pessoas no banco de dados que ocorrem depois que o conjunto de resultados foi criado. |
ResultSet.TYPE_SCROLL_SENSITIVE. | O cursor pode rolar para frente e para trás, e o conjunto de resultados é sensível às alterações feitas por outros no banco de dados que ocorrem depois que o conjunto de resultados foi criado. |
Simultaneidade de ResultSet
As possíveis RSConcurrency são fornecidas abaixo. Se você não especificar nenhum tipo de simultaneidade, obterá automaticamente um que é CONCUR_READ_ONLY.
Simultaneidade | Descrição |
---|---|
ResultSet.CONCUR_READ_ONLY | Cria um conjunto de resultados somente leitura. Este é o padrão |
ResultSet.CONCUR_UPDATABLE | Cria um conjunto de resultados atualizável. |
Todos os nossos exemplos escritos até agora podem ser escritos da seguinte forma, o que inicializa um objeto Statement para criar um objeto ResultSet somente de encaminhamento e leitura -
try {
Statement stmt = conn.createStatement(
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
....
}
finally {
....
}
Navegando em um conjunto de resultados
Existem vários métodos na interface ResultSet que envolvem mover o cursor, incluindo -
SN | Métodos e Descrição |
---|---|
1 | public void beforeFirst() throws SQLException Move o cursor um pouco antes da primeira linha. |
2 | public void afterLast() throws SQLException Move o cursor logo após a última linha. |
3 | public boolean first() throws SQLException Move o cursor para a primeira linha. |
4 | public void last() throws SQLException Move o cursor para a última linha. |
5 | public boolean absolute(int row) throws SQLException Move o cursor para a linha especificada. |
6 | public boolean relative(int row) throws SQLException Move o cursor o número determinado de linhas para frente ou para trás, de onde ele está apontando no momento. |
7 | public boolean previous() throws SQLException Move o cursor para a linha anterior. Este método retorna falso se a linha anterior estiver fora do conjunto de resultados. |
8 | public boolean next() throws SQLException Move o cursor para a próxima linha. Este método retorna falso se não houver mais linhas no conjunto de resultados. |
9 | public int getRow() throws SQLException Retorna o número da linha para a qual o cursor está apontando. |
10 | public void moveToInsertRow() throws SQLException Move o cursor para uma linha especial no conjunto de resultados que pode ser usada para inserir uma nova linha no banco de dados. A localização atual do cursor é lembrada. |
11 | public void moveToCurrentRow() throws SQLException Move o cursor de volta para a linha atual se o cursor estiver atualmente na linha de inserção; caso contrário, este método não faz nada |
Para uma melhor compreensão, vamos estudar Navigate - Example Code .
Ver um conjunto de resultados
A interface ResultSet contém dezenas de métodos para obter os dados da linha atual.
Há um método get para cada um dos tipos de dados possíveis, e cada método get tem duas versões -
Aquele que aceita um nome de coluna.
Aquele que leva em um índice de coluna.
Por exemplo, se a coluna que você está interessado em visualizar contém um int, você precisa usar um dos métodos getInt () de ResultSet -
SN | Métodos e Descrição |
---|---|
1 | public int getInt(String columnName) throws SQLException Retorna o int na linha atual na coluna chamada columnName. |
2 | public int getInt(int columnIndex) throws SQLException Retorna o int na linha atual no índice da coluna especificada. O índice da coluna começa em 1, o que significa que a primeira coluna de uma linha é 1, a segunda coluna de uma linha é 2 e assim por diante. |
Da mesma forma, existem métodos get na interface ResultSet para cada um dos oito tipos primitivos Java, bem como tipos comuns, como java.lang.String, java.lang.Object e java.net.URL.
Também existem 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. Verifique a documentação para obter mais informações sobre como usar esses tipos de dados SQL.
Para uma melhor compreensão, vamos estudar Visualização - Exemplo de Código .
Atualizando um conjunto de resultados
A interface ResultSet contém uma coleção de métodos de atualização para atualizar os dados de um conjunto de resultados.
Tal como acontece com os métodos get, existem dois métodos de atualização para cada tipo de dados -
Aquele que aceita um nome de coluna.
Aquele que leva em um índice de coluna.
Por exemplo, para atualizar uma coluna String da linha atual de um conjunto de resultados, você usaria um dos seguintes métodos updateString () -
SN | Métodos e Descrição |
---|---|
1 | public void updateString(int columnIndex, String s) throws SQLException Altera a String na coluna especificada para o valor de s. |
2 | public void updateString(String columnName, String s) throws SQLException Semelhante ao método anterior, exceto que a coluna é especificada por seu nome em vez de seu índice. |
Existem métodos de atualização para os oito tipos de dados primitivos, bem como String, Object, URL e os tipos de dados SQL no pacote java.sql.
Atualizar uma linha no conjunto de resultados altera as colunas da linha atual no objeto ResultSet, mas não no banco de dados subjacente. Para atualizar suas alterações na linha do banco de dados, você precisa invocar um dos seguintes métodos.
SN | Métodos e Descrição |
---|---|
1 | public void updateRow() Atualiza a linha atual atualizando a linha correspondente no banco de dados. |
2 | public void deleteRow() Exclui a linha atual do banco de dados |
3 | public void refreshRow() Atualiza os dados no conjunto de resultados para refletir quaisquer alterações recentes no banco de dados. |
4 | public void cancelRowUpdates() Cancela todas as atualizações feitas na linha atual. |
5 | public void insertRow() Insere uma linha no banco de dados. Este método só pode ser chamado quando o cursor está apontando para a linha de inserção. |
Para um melhor entendimento, vamos estudar Atualização - Exemplo de Código .