Junior
Qual é a diferença entre os métodos execute, executeQuery e executeUpdate?
sobes.tech IA
Resposta da IA
Os métodos execute, executeQuery e executeUpdate são utilizados para executar consultas SQL através do JDBC, mas destinam-se a diferentes tipos de consultas e retornam resultados diferentes.
-
executeQuery(String sql):- Destinado a executar consultas SQL do tipo
SELECT. - Retorna um objeto
ResultSetcontendo os resultados da consulta. - Lança uma exceção
SQLExceptionse a consulta não for umSELECT.
// Exemplo de uso de executeQuery String sql = "SELECT COUNT(*) FROM users"; try (ResultSet rs = statement.executeQuery(sql)) { if (rs.next()) { int userCount = rs.getInt(1); System.out.println("Número de utilizadores: " + userCount); } } catch (SQLException e) { e.printStackTrace(); } - Destinado a executar consultas SQL do tipo
-
executeUpdate(String sql):- Destinado a executar consultas SQL do tipo
INSERT,UPDATEouDELETE. - Pode também ser usado para executar comandos DDL (por exemplo,
CREATE TABLE,ALTER TABLE). - Retorna um inteiro (
int) que representa o número de linhas afetadas (paraINSERT,UPDATE,DELETE) ou 0 (para comandos DDL). - Lança uma exceção
SQLExceptionse a consulta retornar umResultSet.
// Exemplo de uso de executeUpdate String sql = "UPDATE products SET price = price * 1.1 WHERE category = 'electronics'"; try { int updatedRows = statement.executeUpdate(sql); System.out.println("Linhas atualizadas: " + updatedRows); } catch (SQLException e) { e.printStackTrace(); } - Destinado a executar consultas SQL do tipo
-
execute(String sql):- Método universal para executar qualquer tipo de consulta SQL.
- Retorna
boolean:truese o resultado for umResultSet(paraSELECT), efalsese o resultado for o número de linhas afetadas ou não retornar nada (paraINSERT,UPDATE,DELETE, DDL). - Para obter o resultado real após
execute:- Se
executeretornartrue, usargetResultSet()para obter oResultSet. - Se
executeretornarfalse, usargetUpdateCount()para obter o número de linhas afetadas.
- Se
// Exemplo de uso de execute String sql = "CREATE TABLE IF NOT EXISTS logs (id INT PRIMARY KEY, message VARCHAR(255))"; try { boolean isResultSet = statement.execute(sql); if (isResultSet) { // É uma consulta SELECT try (ResultSet rs = statement.getResultSet()) { // Processar resultados } } else { // É uma consulta INSERT, UPDATE, DELETE ou DDL int updateCount = statement.getUpdateCount(); System.out.println("Linhas afetadas ou resultado DDL: " + updateCount); } } catch (SQLException e) { e.printStackTrace(); }
Na tabela abaixo, as principais diferenças são apresentadas:
| Método | Tipo de consulta SQL | Valor devolvido | Exemplos de consultas |
|---|---|---|---|
executeQuery |
SELECT |
ResultSet |
SELECT * FROM users |
executeUpdate |
INSERT, UPDATE, DELETE, DDL |
int (número de linhas afetadas ou 0) |
INSERT INTO, UPDATE users, DROP TABLE |
execute |
Qualquer | boolean (true se ResultSet; false caso contrário) |
Qualquer |
Geralmente, recomenda-se usar métodos mais específicos (executeQuery, executeUpdate) quando o tipo de consulta é conhecido com antecedência, pois isso melhora a clareza do código e permite ao compilador ou IDE realizar verificações mais precisas. O método execute é usado em casos onde o tipo de consulta pode ser dinâmico ou desconhecido antecipadamente.