Questão nº 36
Questão de Java SE · FCC TRE-PR 2017 (nº 36)
Considere o fragmento de código abaixo, retirado de uma classe de acesso a dados em uma aplicação que utiliza Java Database Connectivity − JDBC e Java 8.
String url="jdbc:mysql://localhost:3306/empresa";
String sql = "insert into cliente(id, nome) values (?, ?)";
Connection conn;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, "root", "h3$c7Ab");
PreparedStatement st = conn.prepareStatement(sql);
st.setInt(1, 10);
st.setString(2, "Marco Antonio");
st.setString(3, "(11)5678-9087");
st.executeUpdate();
JOptionPane.showMessageDialog(null, "Os dados do cliente foram salvos");
conn.close();
} catch (......
I
ex) {
JOptionPane.showMessageDialog(null, "Erro ao conectar com o Banco de Dados");
}
Para tratar corretamente as exceções que podem ser lançadas no bloco try{}, a lacuna I deve ser preenchida com
- A`ClassNotFoundException | SQLException` (alternativa correta)
- B`DriverException | MySQLException`
- C`ClassNotFoundException | JDBCException`
- D`JDBCException | SQLException`
- E`SQLException | DriverException`
Resposta comentada
Gabarito Alternativa A
Em Java, exceções verificadas (checked exceptions) são erros que o compilador exige que você trate explicitamente, seja com um bloco try-catch ou declarando-as no método. As operações de JDBC (Java Database Connectivity) lançam exceções verificadas para indicar problemas na conexão ou interação com o banco de dados.
-
(A) Correta: A alternativa
ClassNotFoundException | SQLExceptioné a correta porque cobre as duas principais exceções verificadas que podem ser lançadas no blocotryfornecido:ClassNotFoundException: É lançada pela linhaClass.forName("com.mysql.jdbc.Driver");se a classe do driver JDBC (neste caso, o driver MySQL) não for encontrada no classpath da aplicação.SQLException: É a exceção base para quase todas as operações JDBC relacionadas à interação com o banco de dados. Ela pode ser lançada porDriverManager.getConnection(),conn.prepareStatement(),st.setInt(),st.setString(),st.executeUpdate(), econn.close()em caso de erros de conexão, SQL inválido, problemas de permissão, violação de restrições, ou qualquer outro problema de banco de dados. A linhast.setString(3, "(11)5678-9087");é um exemplo de erro que causaria umaSQLExceptionem tempo de execução, pois o SQL tem apenas dois placeholders (?).
-
(B) Incorreta:
DriverExceptioneMySQLExceptionnão são classes de exceção padrão do pacotejava.sqlou do Java em geral. A API JDBC utilizaSQLExceptionpara erros relacionados a drivers e bancos de dados. -
(C) Incorreta:
JDBCExceptionnão é uma classe de exceção padrão do pacotejava.sql. A exceção principal para erros JDBC éSQLException. -
(D) Incorreta:
JDBCExceptionnão existe como uma exceção padrão da API JDBC. A exceção correta para problemas de banco de dados éSQLException. -
(E) Incorreta:
DriverExceptionnão é uma classe de exceção padrão. Além disso, esta alternativa não incluiClassNotFoundException, que é essencial para tratar o carregamento do driver.
Fonte: FCC TRE-PR 2017 Analista Judiciário - Área Apoio Especializado - Especialidade Análise de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.