Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Ao usar o Microsoft JDBC Driver para SQL Server, todas as condições de erro de banco de dados são retornadas para seu aplicativo Java como exceções usando a classe SQLServerException. Os seguintes métodos da classe SQLServerException são herdados de java.sql.SQLException e java.lang.Throwable; e eles podem ser usados para retornar informações específicas sobre o erro do SQL Server que ocorreu:
O
getSQLState()retorna o código de estado padrão X/Open ou SQL99 da exceção.O
getErrorCode()retorna o número de erro de banco de dados específico.O
getMessage()retorna o texto completo da exceção. O texto da mensagem de erro descreve o problema e frequentemente inclui marcadores para informações, como nomes de objetos, que são inseridos na mensagem de erro quando ela é exibida.O
getSQLServerError()retorna o objetoSQLServerErrorque contém informações detalhadas sobre a exceção, conforme recebido do SQL Server. Esse método retornará nulo se nenhum erro de servidor tiver ocorrido.
Os métodos a seguir da classe SQLServerError podem ser usados para obter detalhes adicionais sobre o erro gerado no servidor.
O
SQLServerError.getErrorMessage()retorna a mensagem de erro como recebida do servidor.O
SQLServerError.getErrorNumber()retorna um número que identifica o tipo do erro.O
SQLServerError.getErrorState()retorna um código de erro numérico do SQL Server que representa um erro, aviso ou mensagem "nenhum dado encontrado".O
SQLServerError.getErrorSeverity()retorna o nível de gravidade do erro recebido.O
SQLServerError.getServerName()retorna o nome do computador que está executando uma instância do SQL Server que gerou o erro.O
SQLServerError.getProcedureName()retorna o nome do procedimento armazenado ou RPC (chamada de procedimento remoto) que gerou o erro.O
SQLServerError.getLineNumber()retorna o número de linha no lote de comandos Transact-SQL ou no procedimento armazenado que gerou o erro.
No exemplo a seguir, uma conexão aberta com o banco de dados de exemplo AdventureWorks2025 do SQL Server é passada para a função, e uma instrução SQL malformada é construída sem uma cláusula FROM. Em seguida, a instrução é executada e uma exceção SQL é processada.
public static void executeSQLException(Connection con) {
try (Statement stmt = con.createStatement();) {
String SQL = "SELECT TOP 10 * Person.Contact";
ResultSet rs = stmt.executeQuery(SQL);
while (rs.next()) {
System.out.println(rs.getString("FirstName") + " " + rs.getString("LastName"));
}
}
catch (SQLException se) {
do {
System.out.println("SQL STATE: " + se.getSQLState());
System.out.println("ERROR CODE: " + se.getErrorCode());
System.out.println("MESSAGE: " + se.getMessage());
System.out.println();
}
while (se != null);
}
}
Usando o ServerMessageHandler
A partir da versão 12.8.0, o driver tem um ServerMessageHandler adicional que permite uma maior quantidade de controle sobre o feedback de erro e os logs. Para usar o ServerMessageHandler, é necessário implementar a interface ISQLServerMessageHandler. Os recursos do ServerMessageHandler incluem:
Feedback da mensagem
Permite que você receba feedback de consultas de longa duração (como mensagens de progresso). Por exemplo, RAISERROR ('Progress message...', 0, 1) WITH NOWAIT.
Registro universal de erros
Permite que o manipulador de mensagens manipule os logs de todos os erros.
Tratamento de erros universal
Permite que você coloque a lógica de tratamento de erros apenas como ServerMessageHandler, em vez de repetir o mesmo tratamento de erros em todo o aplicativo.
Remapeamento da gravidade da mensagem de erro
Permite reconhecer e alterar a gravidade de mensagens de erro específicas:
SQLServerError.toSQLServerInfoMessage()retorna umISQLServerMessage, criado ao rebaixar uma mensagem de erro para uma mensagem informativa.SQLServerError.toSQLServerInfoMessage(int newErrorSeverity)retorna umISQLServerMessage, criado ao rebaixar uma mensagem de erro para uma mensagem informativa, com um novo nível de severidade.SQLServerError.toSQLServerInfoMessage(int newErrorSeverity, int newErrorNumber)retorna umISQLServerMessage, obtido ao rebaixar uma mensagem de erro para uma mensagem informativa, com nova gravidade e novo número de erro.SQLServerInfoMessage.toSQLServerError()retorna umISQLServerMessage, criado ao converter uma mensagem informativa em uma mensagem de erro.SQLServerInfoMessage.toSQLServerError(int newErrorSeverity)retorna umISQLServerMessage, criado ao elevar uma mensagem informativa a uma mensagem de erro, com uma nova severidade de erro.SQLServerInfoMessage.toSQLServerError(int newErrorSeverity, int newErrorNumber)retorna umISQLServerMessage, criado pela conversão de uma mensagem informativa em uma mensagem de erro, com nova severidade e novo número de erro.
SQLExceptionChaining
Também na versão 12.8.0, as SQLExceptions podem ser encadeadas, de modo que a mensagem de exceção final contém automaticamente todas as exceções que podem ter sido perdidas. Esse recurso está habilitado por padrão.