jdbc exception handling how handle sql exceptions
melhor software conversor de vídeo para windows
Este tutorial de Manipulação de Exceções JDBC explica maneiras de lidar com Exceções SQL com a ajuda de exemplos de programação:
No Gerenciamento de transações JDBC tutorial do Série de tutoriais JDBC , aprendemos tipos de transações JDBC, tipos de dados, métodos de gerenciamento de transações e como usá-los em programas Java.
Neste tutorial, aprenderemos sobre exceções em JDBC e como lidar com elas. Em JDBC, se a exceção ocorreu devido à conectividade do banco de dados ou qualquer coisa relacionada ao banco de dados, ela virá sob SQLException. Aqui, veremos mais informações sobre SQLExceptions.
Vamos nos preparar para aprender sobre exceções em JDBC.
O que você aprenderá:
Tratamento de exceções JDBC
Exceções ocorrem quando há um erro ou aviso na execução do programa. Quando ocorre uma exceção, o fluxo normal do programa será interrompido e o programa será encerrado de forma anormal. A coisa boa sobre a exceção é que podemos tratá-la usando um bloco try-catch ou uma palavra-chave throws. Todas as exceções e erros são subclasses da classe Throwable. A classe lançável é a classe base de todas as exceções e erros.
Palavras-chave de tratamento de exceções Java
Existem cinco palavras-chave em Java Exception Handling. Eles são os seguintes:
- Tentar: As instruções do programa que podem gerar a exceção devem ser mantidas em um bloco try.
- Pegar: Se ocorrer alguma exceção no bloco try, ela será lançada. Podemos capturar essa exceção usando o bloco Catch e tratá-la no código.
- Lançar: As exceções geradas pelo sistema são lançadas automaticamente pela JVM. Para lançar manualmente as exceções, devemos usar uma palavra-chave throw.
- Lança: Qualquer exceção que tenha sido lançada de um método deve ser especificada por uma cláusula throws.
- Finalmente: Quaisquer instruções do programa que devem ser executadas após o bloco try devem ser mantidas no bloco finally.
>> Clique aqui para obter mais informações sobre exceções em Java.
SQLException
No JDBC, podemos obter exceções ao executar ou criar a consulta. As exceções que ocorrem devido ao Banco de Dados ou Driver vêm sob Exceção SQL. Usando o tratamento de exceções, podemos tratar a exceção SQL como tratamos a exceção normal.
SQLException está disponível no pacote java.sql. Ele estende a classe Exception, o que significa que podemos usar os métodos disponíveis na classe Exception na classe SQLException também.
Exemplo de exceção SQL
Erro de sintaxe na instrução SQL pode resultar em Exceção SQL. Quando tal exceção ocorrer, um objeto da classe SQLException será passado para o bloco catch. Usando as informações no objeto SQLException, podemos capturar essa exceção e continuar o programa.
O objeto SQLException tem os seguintes métodos:
Nome do Método | Descrição |
---|---|
getErrorCode () | Ele retorna o número do erro |
getMessage () | Ele retorna a mensagem de erro |
getSQLState () | Ele retorna o SQLState do objeto SQLException. Ele também pode retornar nulo. Para erro de banco de dados, ele retornará XOPEN SQL State |
getNextException () | Ele retorna a próxima exceção na cadeia de exceções. |
printStackTrace () | Ele imprime a exceção atual e seu backtrace para um fluxo de erro padrão |
setNextException (SQLEXception ex) | É usado para adicionar outra exceção SQL na cadeia |
Como lidar com exceções
A exceção relacionada ao JDBC geralmente lança SQLException, e é uma exceção verificada, portanto, devemos capturá-la ou lançá-la. Toda a lógica de negócios e dados de commit devem ser feitos em um bloco Try, se alguma exceção acontecer no bloco devemos capturar e tratar no bloco Catch. Com base no tipo de exceção, devemos fazer rollbacks ou commit no bloco Catch.
Categorias de SQLException
Às vezes, o driver JDBC pode lançar a subclasse de SQLException que representa um estado SQL comum ou um estado de erro comum que não está especificamente associado a um valor de classe de estado SQL específico. Isso fará com que você trate a exceção de uma maneira mais específica, e podemos tratá-la em nosso código. Esses tipos de exceções vêm nas subclasses de uma das seguintes exceções:
- SQLNonTransientException: Esse tipo de exceção será lançado quando uma instância em que uma nova tentativa da mesma operação falhar, a menos que a causa da SQLException tenha sido corrigida.
- SQLTransientException: Esse tipo de exceção será lançado quando uma operação com falha anterior puder ser bem-sucedida quando tentarmos a operação novamente sem qualquer alteração / intervenção.
- SQLRecoverableException: Esse tipo de exceção será lançado quando uma operação com falha anterior puder ser bem-sucedida quando tentarmos novamente a operação com qualquer alteração / intervenção do aplicativo. Ao fazer isso, a conexão atual deve ser fechada e a nova conexão deve ser aberta.
Outras subclasses de SQLException:
A seguir estão as subclasses de SQLException:
- BatchUpdateException: Esse tipo de exceção será lançado se ocorrer algum erro durante a operação de atualização em lote. Além das informações de SQLException, BatchUpdateException fornece o status das instruções que foram executadas / atualizadas antes da ocorrência do erro.
- SQLClientInfoException: Esse tipo de exceção será lançado se uma ou mais propriedades de informações não puderem ser definidas em uma conexão. Além das informações SQLException, SQLClientInfoException uma lista de propriedades de informações do cliente que não foram definidas.
Neste tutorial, veremos SQLException normal e, em seguida, BatchUpdateException. Você pode exercitar as subclasses restantes de SQLException em seu sistema.
No exemplo a seguir, iremos elaborar sobre como lidar com a exceção.
Todos os programas são escritos em Java, neste tutorial. Usamos a versão Java 8 e Oracle DB.
>> Clique aqui para baixar o software Oracle
>> Clique aqui para baixar o Java versão 8
Possui o processo de instalação do Java passo a passo.
Programa de exemplo de exceções
package com.STH.JDBC; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Exception_Example { public static void main(String() args) throws ClassNotFoundException { // TODO Auto-generated method stub String update_query = 'update employee_details set email='martinL@gmail.com' where empNum1 = 10011'; //Update query to set the email id for the employee whose empNUM is 10011 Class.forName('oracle.jdbc.driver.OracleDriver'); try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); ResultSet rs1 =null; statemnt1 = conn.createStatement(); System.out.println('Executing Update query using executeUpdate method'); int return_rows = statemnt1.executeUpdate(update_query); System.out.println('No. of Affected Rows = '+ return_rows); } catch(SQLException sqe) { System.out.println('Error Code = ' + sqe.getErrorCode()); System.out.println('SQL state = ' + sqe.getSQLState()); System.out.println('Message = ' + sqe.getMessage()); System.out.println('printTrace /n'); sqe.printStackTrace(); } } }
Resultado:
Explicação:
# 1) Criou uma consulta de seleção que possui o nome da coluna que não está na tabela EMPLOYEE_DETAILS.
Criar consulta:
String update_query = 'update employee_details set email='martinL@gmail.com' where empNum1 = 10011';
#dois) Conexão criada, instrução e execução de select QUERY no bloco try.
# 3) No bloco Catch, tratamos a exceção.
# 4) Estamos exibindo o Erro da exceção usando o método getError (), SQLState da exceção usando o método getSQLState (), a mensagem da exceção usando o método getMessage () e imprimindo o rastreamento de pilha da exceção usando o método printStackTrace.
Exemplo de BatchUpdateException
Criamos uma nova tabela para ilustrar o exemplo BatchUpdateException. O nome da mesa é EMPLOYEE. Possui 3 colunas.
Eles estão:
- ID que é uma chave primária
- SOBRENOME
- PRIMEIRO NOME
Sintaxe para criar uma tabela no ORACLE DB:
CREATE TABLE EMPLOYEE ( ID int NOT NULL PRIMARY KEY, LastName varchar(255), FirstName varchar(255) );
Programa Java:
package com.STH.JDBC; import java.sql.BatchUpdateException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Statement_ExecuteBatch_Example { public static void main(String() args) throws ClassNotFoundException, SQLException { //Inserting the following 3 rows in EMPLOYEE_DETAILS Table String insert_query1 = 'insert into employee values(101,'Patterson','Tony')'; String insert_query2 = 'insert into employee values(102,'Potter','Harry')'; String insert_query3 = 'insert into employee values(102,'Wong','Jane')'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Opening Oracle DB Connection try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); //Adding the 3 insert queries into the Statement object using addBatch method statemnt1.addBatch(insert_query1); statemnt1.addBatch(insert_query2); statemnt1.addBatch(insert_query3); int No_of_Afffected_Rows()= statemnt1.executeBatch(); //After inserting the data System.out.println('No of rows affected = ' +No_of_Afffected_Rows.length); } //Catching the BatchUpdateException catch(BatchUpdateException be) { //getting the updated rows status before the exception has occurred int() updateCount = be.getUpdateCounts(); int count = 1; for (int i : updateCount) { //Using for loop, printing the statement which has been successfully executed if (i == Statement.EXECUTE_FAILED) { System.out.println('Error on Statement ' + count +': Execution failed'); } else { System.out.println('Statement ' + count +': is executed'); } count++; //Incrementing the count to display the next updated row no. } //System.out.println('Error on statemet '+be.getUpdateCounts()); be.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }
RESULTADO:
Explicação:
O que fizemos no programa acima é que criamos 3 consultas INSERT, adicionamos em um lote e executamos. Os 3rdconsulta tem o mesmo valor de id de 1stconsulta uma vez que a coluna ID é uma chave primária da tabela EMPLOYEE, o programa lançou uma BatchUpdateException.
- Criou as 3 consultas de inserção para inseri-lo na tabela EMPLOYEE. A primeira e a terceira consulta têm o mesmo valor de ID. A coluna id é uma chave primária para a tabela EMPLOYEE.
- Objeto de instrução criado e adicionado essas 3 consultas a ele usando o método addBatch (). Em seguida, chamado método executeBatch () para executá-lo.
- Uma vez que a primeira e a terceira consulta têm o mesmo valor de ID. Quando executeBatch () tentar executar a terceira consulta, ele lançará BatchUpdateException.
- No bloco catch BatchUpdateException, chamamos o método getUpdateCounts () para obter o status da linha atualizada.
- Usando o loop for, estamos verificando um por um se o status de uma instrução específica foi executada com falha ou não. Se a instrução específica não falhar, ele imprimirá o número da linha da instrução.
- Depois disso, ele imprimirá o printStackTrace da BatchUpdateException.
- No exemplo acima, como a exceção ocorreu por causa da terceira instrução, as instruções 1 e 2 foram impressas. Em seguida, o rastreamento completo da exceção foi impresso no console de saída.
Pontos para lembrar:
- A exceção que ocorreu devido ao Banco de Dados virá sob SQLException.
- Exceções em Java podem ser tratadas usando o bloco try: catch.
- SQLException é a exceção verificada para que possamos tratá-la usando o bloco try: catch.
- Temos algumas subclasses de SQLException. Eles são SQLNonTransientException, SQLTransientException, SQLRecoverableException, BatchUpdateException e SQLClientInfoException.
perguntas frequentes
P # 1) O que é uma exceção SQL?
Responda: Ocorreu uma exceção porque o Banco de dados é conhecido como Exceção SQL. Uma exceção que fornece informações sobre o banco de dados também é conhecida como Exceção SQL. Temos uma classe SQLException em Java, que é usada para fornecer informações sobre a exceção. Possui os seguintes métodos:
- getErrorCode ()
- getMessage ()
- getSQLState ()
- printStackTrace ()
- getNextException ()
P # 2) Como lidar com a exceção no SQL?
Responda: Escreva a lógica de negócios no bloco try. Se algum erro ou exceção tiver ocorrido nele, capture-o no bloco Catch e escreva a mensagem apropriada para encontrar a exceção facilmente.
O bloco Try – Catch é usado para tratar a exceção.
P # 3) Quando SQLException pode ocorrer em Java?
Responda: SQLException ocorre se houver um erro no acesso ao banco de dados ou outros erros relacionados ao banco de dados. Quando ocorre SQLException, um objeto do tipo SQLException será passado para a cláusula catch. Podemos lidar com isso no bloco Catch.
P # 4) O que é a cadeia de exceções em Java e para que serve?
Responda: Uma exceção que causa outra exceção é conhecida como Cadeia de Exceções ou Exceção Encadeada. Na maioria dos casos, precisamos encadear a exceção de forma que relacione uma exceção com outra exceção, isso tornará os logs claros e de fácil rastreamento. Será útil para o programador no processo de depuração.
Por exemplo:
Considere um método que lança uma exceção aritmética devido à divisão por zero. A causa real da exceção é um erro de E / S, que torna o divisor zero. O método lançará apenas uma exceção aritmética para o programador. Para que o chamador / programador não saiba sobre a causa real da Exceção. Nesse tipo de situação, podemos usar uma exceção encadeada.
Conclusão
As exceções podem ser tratadas usando um bloco try-catch ou lançando-o. Exceções ocorridas devido ao banco de dados ser conhecido como SQLException. Temos uma classe separada para SQLException, que é uma subclasse de Exception. Temos os métodos para conhecer a exceção SQL de forma mais específica.
Os métodos são getMessage (), getErrorCode (), getSQLState (), getNextException e printStackTace. getNextException será usado no caso do Exception Chained.
Leitura recomendada
- Exceções Java e tratamento de exceções com exemplos
- As 10 principais exceções de selênio e como lidar com elas (código exato)
- Guia completo para tratamento de exceções PL SQL com exemplos
- Tutorial de tratamento de exceções C # com exemplos de código
- Tratamento de exceções em C ++
- Como lidar com exceções em scripts SoapUI Groovy - Tutorial # 11 do SoapUI
- Tutorial PL SQL para iniciantes com exemplos | O que é PL / SQL
- Pacote PL SQL: Tutorial do pacote Oracle PL / SQL com exemplos