Lidando com erros

Disponível

Lágrimas e dor

Podem ocorrer erros durante a execução de um programa Java. Ao trabalhar com o banco de dados, ocorrerão erros . É tudo sobre qual deles você pode prever e oferecer uma solução adequada.

O primeiro grande grupo de erros estará esperando por você ao executar esta linha:

Connection connection  = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",  "root", "secret");

O que você pode esperar aqui?

Erro 1. Driver não encontrado .

Se você receber o erro “Nenhum driver adequado encontrado para…” , isso significa que o DriverManager não conseguiu entender que tipo de DBMS está por trás do seu URL. Por exemplo, você escreveu jdbc_mysql: em vez de jdbc:mysql:

Erro 2. Erro de conexão .

Se você cometer um erro no nome do host, provavelmente receberá uma mensagem como “Nenhum host é conhecido” ou “Falha no link de comunicação”.

Erro 3. O nome do banco de dados está incorreto .

Se você digitou incorretamente o nome do banco de dados ou se conectar a outro servidor onde ele não existe, receberá uma mensagem como “Banco de dados desconhecido 'supershop3'” .

Erro 4. Login ou senha incorreta .

Se você esqueceu a senha do banco de dados ou a digitou incorretamente, provavelmente receberá uma mensagem como “Acesso negado para o usuário 'root'@'localhost' (usando a senha: SIM)” .

Exceção SQL

Se a conexão com a base for estabelecida, será mais interessante ainda. Em caso de erros ao trabalhar com o banco de dados, o JDBC tem uma exceção especial - java.sql.SQLException . Bem como várias de suas variedades.

Essa exceção possui apenas um método adicional (em comparação com a classe Exception) - o método getSQLState(), que retorna o código de status (string) que o servidor SQL retornou a ele. O tratamento de erros se parece com isto:

Connection connection  = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",  "root", "secret");
try {
   int rowsCount = statement.executeUpdate("DELETE FROM ‘Unemployees’");
} catch (SQLException ex) {
  // If table doesn't exist
   if (ex.getSQLState().compareTo("X0Y32") != 0) {
  	throw ex;
  }
 } finally {
  connection.close();
 }

Existem centenas de códigos de erro. Você pode ver a lista completa aqui .

Mas, às vezes, os códigos de erro ajudam o JDBC a entender melhor o erro e, em seguida, lança não apenas SQLException, mas SQLException especializada:

BatchUpdateException Erro durante solicitação de grupo
DataTruncation Frequentemente ocorre ao truncar dados longos
SQLClientInfoException O cliente passou parâmetros que não podem ser configurados na conexão: Conexão
SQLDataException Erro com dados, detalhes dependem do tipo de DBMS
SQLException Erro de acesso ao banco de dados ou outros erros gerais
SQLFeatureNotSupportedException DBMS não suporta esta funcionalidade
SQLIntegrityConstraintViolationException Todos os erros com para SQLState ==22
SQLInvalidAuthorizationSpecException Erro de acesso e/ou autorização
SQLNonTransientConnectionException Todos os erros com para SQLState ==08
SQLRecoverableException Há um erro, mas pode ser corrigido com a intervenção do aplicativo
SQLSyntaxErrorException Erro na sintaxe da consulta
SQLTimeoutException A solicitação demorou muito
SQLTransactionRollbackException Erro durante a reversão da transação
SQLWarning Aviso emitido pelo DBMS

Exemplos de erros

Se ocorreu um erro no estágio do aplicativo do servidor, geralmente ele só pode ser registrado e tratado com mais detalhes. Mas se aconteceu enquanto o aplicativo estava sendo executado no computador do programador, você precisa investigar cuidadosamente o motivo disso.

Existem duas maiores classes de erros ao trabalhar com um banco de dados:

  • Solicitar erro de texto
  • Erro ao trabalhar com ResultSet

Um erro no texto da solicitação pode ocorrer com muita frequência. A consulta pode ser muito longa, conter várias tabelas (unidas via JOIN) e subconsultas (SUBSELECT). Não é fácil encontrar um erro em tal solicitação. Além disso, as solicitações geralmente são coladas a partir de peças, os dados são adicionados lá.

O primeiro erro que você deve estar ciente é SQLSyntaxErrorException . Esse erro geralmente significa que você tem um erro de digitação no corpo da solicitação.

Vamos pegar nosso exemplo favorito:

ResultSet results = statement.executeQuery("SELECT Count(*) FROM user");
results.next();
    int count = results.getInt(1);

E “acidentalmente” exclua o asterisco no corpo da solicitação:

ResultSet results = statement.executeQuery("SELECT Count() FROM user");
results.next();
    int count = results.getInt(1);

Então teremos uma exceção:

Exception in thread "main" java.sql.SQLSyntaxErrorException:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') FROM task' at line 1

           	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)

O servidor SQL nos diz que houve um erro de sintaxe antes de FROM.

Nós olhamos cuidadosamente para o pedido e pensamos. Se nada vier à mente, e isso acontece com muita frequência, você precisa pedir a alguém para ver o que está errado.

Outro erro popular é o trabalho incorreto com ResultSet - o resultado da solicitação. Suponha que você esqueceu que antes de ler os dados, a “linha atual” do objeto ResultSet vem antes da primeira linha, então você terá o seguinte código:

ResultSet results = statement.executeQuery("SELECT Count(*) FROM user");
//    results.next();
    int count = results.getInt(1);

Você receberá este erro:


2012 12:55:48 AM jButton5ActionPerformed
SEVERE: null
java.sql.SQLException: Before start of result set
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:841)
    at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5650)
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5570)

Olhamos cuidadosamente para o erro e pensamos. Em seguida, pesquisamos no Google e encontramos alguns exemplos e tentamos entender a solução.

Comentários
  • Populares
  • Novas
  • Antigas
Você precisa acessar para deixar um comentário
Esta página ainda não tem nenhum comentário