Sobes.tech
Middle

Como é que a classe ResultSet está estruturada em Java?

sobes.tech IA

Resposta da IA

ResultSet é uma interface no pacote java.sql, que representa os resultados da execução de uma consulta SQL. Fornece acesso aos dados passo a passo (linha por linha).

Aspectos principais:

  • Cursor: ResultSet suporta um cursor que aponta para a linha de dados atual. Inicialmente, o cursor está antes da primeira linha.
  • Navegação: Para mover o cursor, usam-se métodos como next(), previous(), first(), last(). next() devolve true se o cursor moveu com sucesso para a próxima linha, e false se atingiu o final do resultado.
  • Tipos: Existem diferentes tipos de ResultSet com várias capacidades de navegação e atualização de dados:
    • TYPE_FORWARD_ONLY: O cursor move-se apenas para frente (mais eficiente).
    • TYPE_SCROLL_INSENSITIVE: O cursor pode mover-se em qualquer direção, alterações na base de dados não são refletidas.
    • TYPE_SCROLL_SENSITIVE: O cursor pode mover-se em qualquer direção, alterações na base de dados são refletidas (pode ser mais lento).
  • Concurrência: Define se os dados podem ser modificados através de ResultSet:
    • CONCUR_READ_ONLY: Apenas leitura.
    • CONCUR_UPDATABLE: Leitura e escrita.
  • Obtenção de dados: Os dados da linha atual são extraídos usando métodos como get<Type>(), por exemplo, getString(int columnIndex), getInt(String columnLabel), getDate(int columnIndex).
  • Fecho: É importante fechar o ResultSet após uso para libertar recursos, usando o método close(). Normalmente, isto é feito num bloco finally ou com try-with-resources.

Exemplo de uso:

// Assume-se que connection e statement já estão inicializados
try (ResultSet resultSet = statement.executeQuery("SELECT id, name FROM users")) {
    while (resultSet.next()) {
        int id = resultSet.getInt("id");
        String name = resultSet.getString("name");
        System.out.println("ID do utilizador: " + id + ", Nome: " + name);
    }
} catch (SQLException e) {
    e.printStackTrace();
}

ResultSet não armazena todos os dados na memória ao mesmo tempo, o que o torna eficiente ao trabalhar com grandes volumes de dados.