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

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ção ocorrer no meio da execução de um comando SQL, as linhas de código abaixo da falha serão ignoradas. Se a chamada ao método Close() estiver posicionada após o ponto de falha, a conexão permanecerá aberta no SGBD.

Para resolver esse problema crítico de infraestrutura, utilizamos duas abordagens padronizadas:

Uso do Bloco finally: O bloco finally garante a execução do código de fechamento, ocorra um erro ou não.

SqlConnection conexao = new SqlConnection(stringConexao);

try {

    conexao.Open();

    // Executa operações de dados

} catch (SqlException ex) {

    MessageBox.Show("Erro de banco de dados: " + ex.Message);

} finally {

    if (conexao.State == ConnectionState.Open) {

        conexao.Close(); // Fechamento garantido

    }

}

Instrução using (C#) / Try-With-Resources (Java): Recursos que implementam a interface de descarte (como IDisposable em C# ou AutoCloseable em Java) são automaticamente fechados e descartados ao término do bloco, mesmo em caso de exceções:

using (SqlConnection conexao = new SqlConnection(stringConexao)) {

    conexao.Open();

    // Operações de dados

} // A conexão é fechada e descartada automaticamente AQUI

O fechamento seguro previne o travamento da aplicação por esgotamento de conexões, garantindo a estabilidade necessária para operar os módulos comerciais da disciplina.


ATIVIDADE DE FIXAÇÃO


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