Postagens

Mostrando postagens de outubro, 2026

Aula 50 - Leitura de Dados com SqlDataReader e ResultSet

Imagem
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 ...

Aula 49 - Execução de Comandos DML e Prevenção contra SQL Injection

Imagem
Com a conexão estabelecida e protegida, o próximo passo é enviar instruções SQL DML (INSERT, UPDATE, DELETE) da aplicação para o SGBD. Em C#, utilizamos a classe SqlCommand ; em Java, utilizamos a interface PreparedStatement . No entanto, a forma como os dados digitados pelo usuário são integrados ao comando SQL determina a segurança de toda a aplicação. Uma prática altamente perigosa e incorreta é a concatenação de strings para montar o comando SQL: // EXEMPLO INCORRETO E VULNERÁVEL (NÃO UTILIZAR): string sql = "INSERT INTO Usuarios (nome, senha) VALUES ('" + txtNome.Text + "', '" + txtSenha.Text + "')"; Essa abordagem abre uma vulnerabilidade grave conhecida como SQL Injection (Injeção de SQL). Se um usuário mal-intencionado digitar no campo de senha o texto ' OR '1'='1, a instrução enviada ao SGBD será alterada dinamicamente, permitindo burlar a autenticação ou até mesmo executar comandos destrutivos como DROP TABLE....

Aula 48 - Tratamento de Exceções de Banco de Dados e Fechamento Seguro

Imagem
Operações de banco de dados são inerentemente instáveis, pois dependem de fatores externos à aplicação, como disponibilidade da rede, saúde do servidor de SGBD, permissões de usuário e integridade das restrições SQL. Portanto, toda interação com o SGBD deve ser obrigatoriamente protegida por um Tratamento Estruturado de Exceções, evitando que falhas de banco causem o encerramento abrupto da aplicação desktop. Tanto em C# quanto em Java, existem classes de exceções especializadas para capturar erros de banco de dados: SqlException no .NET e SQLException no Java. Essas classes fornecem métodos detalhados para diagnosticar o erro: Message: Exibe a descrição do erro retornada pelo SGBD. Number / ErrorCode: Retorna o código numérico específico do erro no SGBD (ex: erro de chave duplicada, violação de chave estrangeira, estouro de tamanho de campo). Além de capturar o erro para informar o usuário de forma amigável, a camada de acesso a dados exige o Fechamento Seguro de Recursos. Se uma exce...

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

Imagem
No desenvolvimento de sistemas orientados a objetos utilizando a linguagem Java, a API padrão para conectividade com bancos de dados relacionais é o JDBC (Java Database Connectivity), presente no pacote java.sql . Assim como no ADO.NET do C#, o JDBC abstrai as particularidades de cada SGBD, fornecendo uma interface única para que o desenvolvedor conecte, envie comandos e processe resultados. Dois elementos centrais gerenciam a conectividade no JDBC: A URL de Conexão JDBC: Uma string padronizada que especifica o protocolo, o SGBD, o endereço do servidor, a porta de comunicação e o nome do banco de dados. Exemplo para MySQL: jdbc:mysql://localhost:3306/db_estoque. A Classe DriverManager : A classe utilitária responsável por gerenciar os drivers JDBC carregados e estabelecer conexões com o banco de dados. O processo de conexão é realizado chamando o método estático getConnection() da classe DriverManager , passando a URL JDBC, o usuário e a senha do SGBD. Essa chamada retorna um objeto...