Postagens

Aula 51 - O Padrão de Arquitetura DAO (Data Access Object)

Imagem
À medida que uma aplicação comercial cresce em complexidade, misturar comandos SQL, abertura de conexões e manipulação de leitores diretamente no código dos eventos de botões da interface gráfica ( Form1.cs ) torna o sistema um "código espaguete": impossível de manter, testar ou reutilizar. Para resolver esse problema estrutural e garantir uma arquitetura limpa, a engenharia de software utiliza o Padrão de Projeto DAO (Data Access Object) . O padrão DAO advoga a Separação de Responsabilidades (Separation of Concerns) : A camada de Interface Gráfica (View) trata apenas da interação visual com o usuário. A camada de Negócios (Model/Domain) contém apenas as classes de dados e regras do negócio ( Produto , ContaPagar ). A camada de Acesso a Dados (DAO) contém todas as instruções SQL, abertura e fechamento de conexões e mapeamento de dados. Cada entidade principal do sistema possui sua própria classe DAO (ex: ProdutoDAO , ContaPagarDAO , FornecedorDAO ). A classe DAO centraliz...

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

Aula 46 - Conectividade em C# com ADO.NET – SqlConnection e Connection Strings

Imagem
  No desenvolvimento de sistemas desktop utilizando a linguagem C#, o ADO.NET é o conjunto de classes e componentes fornecido pela plataforma .NET para gerenciar o acesso a bancos de dados relacionais. Para estabelecer uma ponte de comunicação ativa com o SGBD SQL Server, utilizamos duas estruturas fundamentais: a Connection String (String de Conexão) e a classe SqlConnection . A Connection String é uma cadeia de caracteres formatada que fornece todos os parâmetros necessários para que o ADO.NET localize e se autentique no SGBD. Os parâmetros essenciais de uma connection string incluem: Data Source (ou Server ): O endereço IP ou nome do servidor onde o SGBD está rodando (ex: localhost ou 192.168.1.100 ). Initial Catalog (ou Database ): O nome do banco de dados específico a ser acessado (ex: db_estoque ). User ID e Password : As credenciais de acesso do usuário do SGBD, ou Integrated Security=True para utilizar a autenticação nativa do Windows. A classe SqlConnection (perte...

Aula 45 - Arquiteturas de Aplicações Cliente-Servidor e Drivers de Conexão

Imagem
O desenvolvimento de sistemas desktop corporativos fundamenta-se no modelo de Arquitetura Cliente-Servidor. Nessa estrutura, a aplicação gráfica executada no computador do usuário (seja em C# Windows Forms ou Java) atua como a camada Cliente, responsável por capturar entradas, validar interfaces e exibir resultados. O Servidor, por sua vez, hospeda o Sistema Gerenciador de Banco de Dados (SGBD) relacional, como PostgreSQL, MySQL ou SQL Server, sendo encarregado de processar transações, garantir a segurança dos dados e executar consultas complexas. Para que a aplicação cliente consiga dialogar com o servidor de banco de dados através da rede, é indispensável o uso de um Driver de Conexão (ou Provedor de Dados). O driver é um componente de software que atua como tradutor técnico: ele converte as chamadas de métodos orientados a objetos da linguagem de programação em pacotes de rede e comandos binários nativos que o SGBD é capaz de interpretar e executar. No ecossistema .NET (C#), esses d...