Aula 50 - Leitura de Dados com SqlDataReader e ResultSet

Enquanto os comandos DML (INSERT, UPDATE, DELETE) utilizam o método ExecuteNonQuery() para alterar dados sem retornar tabelas, a instrução SQL SELECT exige um mecanismo especializado para capturar e ler os registros retornados pelo SGBD.

No ecossistema C# (ADO.NET), utilizamos a classe SqlDataReader combinada com o método ExecuteReader() da classe SqlCommand. No Java (JDBC), utilizamos a interface ResultSet combinada com o método executeQuery() do PreparedStatement.

Tanto o SqlDataReader quanto o ResultSet funcionam através do conceito de Cursor Somente Leitura e Somente Avanço (Read-Only, Forward-Only):

O cursor posiciona-se inicialmente antes da primeira linha do conjunto de dados retornado.

O método Read() (C#) ou next() (Java) avança o cursor para a próxima linha. Ele retorna um valor booleano (true se existir uma próxima linha válida, ou false quando atingir o fim dos registros).

O percurso em todos os registros lidos é realizado utilizando a estrutura de repetição while.

Durante o percurso das linhas, os dados de cada coluna são extraídos através de indexadores ou métodos seletores de tipo (ex: GetString(), GetInt32(), GetDouble()) e mapeados para objetos orientados a objetos da nossa aplicação.

Exemplo de Leitura e Mapeamento em C#:

string sql = "SELECT id_produto, nome_produto, preco_unitario
FROM Produtos WHERE quantidade_estoque > 0"; List listaEstoque = new List(); using (SqlCommand cmd = new SqlCommand(sql, conexao)) { conexao.Open(); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { // Mapeamento do registro relacional para o objeto da classe Produto Produto p = new Produto(); p.Id = reader.GetInt32(0); // Coluna 0: id_produto p.Nome = reader.GetString(1); // Coluna 1: nome_produto p.Preco = reader.GetDouble(2); // Coluna 2: preco_unitario listaEstoque.Add(p); // Adiciona na coleção em memória RAM } } }

Esse processo de Mapeamento Objeto-Relacional Manual transforma registros de tabelas SQL em coleções genéricas de objetos (List<Produto>), permitindo que a camada de apresentação gráfica exiba os dados em componentes como o DataGridView.

Comentários

Postagens mais visitadas deste blog

Aula 42 - Linguagem SQL: Comandos DDL (CREATE, ALTER, DROP)

Aula 44 - Linguagem SQL: Consultas com SELECT e Cláusulas de Filtro

Aula 47 - Conectividade em Java com JDBC – DriverManager e Connection