Um desenvolvedor Java está implementando um módulo de relatórios para um sistema escolar. Ele precisa consultar todos os alunos de um determinado curso no banco de dados MySQL e exibir os resultados em tela. Para isso, escreve o seguinte trecho de código:Para que o código funcione corretamente, recuperando os registros da tabela e permitindo a iteração sobre os resultados, assinale a alternativa que preenche, correta e respectivamente, as lacunas do trecho acima.
AResultSet e executeUpdate(), pois esse método é utilizado para executar qualquer instrução SQL que produza um conjunto de resultados iterável, sendo o mais adequado para consultas que retornam múltiplas linhas de uma tabela.
BResultSet e executeBatch(), pois esse método permite agrupar múltiplas instruções SQL em lote e retorna um ResultSet consolidado com todos os registros recuperados pelas instruções executadas em conjunto.
CResultSet e execute(), pois esse método é o único do JDBC capaz de retornar um objeto ResultSet diretamente, sendo obrigatório seu uso em qualquer consulta SQL que produza resultados iteráveis em Java.
DResultSet e executeResult(), pois esse método foi introduzido no JDBC para substituir o executeQuery() em versões modernas do Java, retornando um ResultSet tipado e mais eficiente para consultas com grande volume de dados.
EResultSet e executeQuery(), pois esse método executa instruções SQL de consulta e retorna um objeto ResultSet contendo as tuplas recuperadas, permitindo a iteração pelos resultados por meio do método next().
Revelar gabarito e comentário▾
GabaritoE — ResultSet e executeQuery(), pois esse método executa instruções SQL de consulta e retorna um objeto ResultSet contendo as tuplas recuperadas, permitindo a iteração pelos resultados por meio do método next().
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
JDBC: executeQuery() e ResultSet
Gabarito: letra E. Para consultas SQL que retornam múltiplas linhas (como a busca de todos os alunos de um curso), o método correto é executeQuery(), que retorna um objeto ResultSet contendo as tuplas recuperadas, permitindo a iteração com next(). Os demais métodos (executeUpdate(), executeBatch(), execute(), executeResult()) não são adequados para essa finalidade, pois ou não retornam um ResultSet ou não são métodos reais da API JDBC.
O JDBC (Java Database Connectivity) é a API padrão do Java para acesso a bancos de dados relacionais. Ela fornece um conjunto de interfaces e classes que permitem ao desenvolvedor conectar-se a um banco, enviar instruções SQL e processar os resultados. O fluxo típico de uma operação de consulta envolve: (1) obter uma conexão via DriverManager.getConnection(), (2) criar um Statement ou PreparedStatement com a instrução SQL, (3) executar a consulta e (4) processar o ResultSet retornado.
O ResultSet é a interface que representa o conjunto de resultados de uma consulta. Ele funciona como uma tabela virtual, com linhas e colunas, e é percorrido sequencialmente por meio do método next(), que move o cursor para a próxima linha e retorna true se houver uma linha válida. Dentro do loop, os valores de cada coluna são acessados por métodos como getString(), getInt(), getDouble(), entre outros, que recebem o índice ou o nome da coluna.
A escolha do método de execução é crucial: executeQuery() é o único método da interface Statement (e suas subclasses) projetado especificamente para instruções SELECT, retornando um ResultSet. Já executeUpdate() é usado para instruções que modificam dados (INSERT, UPDATE, DELETE, DDL), retornando um int com o número de linhas afetadas. O método execute() é genérico e pode retornar true se houver um ResultSet ou false caso contrário, exigindo tratamento adicional. executeBatch() é para executar um lote de instruções e retorna um array de int com os resultados de cada comando. Não existe um método executeResult() na API JDBC.
A pegadinha desta questão está em confundir os métodos de execução do JDBC, especialmente executeQuery() com executeUpdate() ou execute(). O candidato que não domina a distinção entre consulta (SELECT) e atualização (INSERT/UPDATE/DELETE) tende a escolher uma alternativa incorreta. A banca explora exatamente essa confusão, apresentando justificativas plausíveis para métodos que não se aplicam ao contexto de uma consulta que retorna múltiplas linhas.
Guarde a fronteira: se a instrução SQL é uma consulta (SELECT), o método é executeQuery() e o retorno é um ResultSet; se é uma atualização (INSERT, UPDATE, DELETE), o método é executeUpdate() e o retorno é um int. É nessa distinção que as alternativas se dividem.
Métodos de execução JDBC: executeQuery() (Consulta (SELECT), Retorna ResultSet, Itera com next()); executeUpdate() (INSERT/UPDATE/DELETE/DDL, Retorna int (linhas afetadas)); execute() (Genérico, Retorna boolean, ResultSet via getResultSet()); executeBatch() (Lote de instruções, Retorna int[]); executeResult() (Não existe na API)
Alternativa A — ❌ Incorreta
O erro está em afirmar que executeUpdate() é utilizado para "qualquer instrução SQL que produza um conjunto de resultados iterável". Na verdade, executeUpdate() é destinado a instruções que modificam o banco de dados (INSERT, UPDATE, DELETE, DDL) e retorna um int com o número de linhas afetadas, não um ResultSet. Para consultas SELECT, o método correto é executeQuery().
Alternativa B — ❌ Incorreta
executeBatch() é usado para executar um lote de instruções SQL de uma só vez, retornando um array de int com os resultados de cada comando. Ele não retorna um ResultSet consolidado, e não é adequado para uma consulta simples que retorna múltiplas linhas. A descrição da alternativa é completamente equivocada quanto ao funcionamento do método.
Alternativa C — ❌ Incorreta
A afirmação de que execute() é "o único método do JDBC capaz de retornar um objeto ResultSet diretamente" é falsa. O método execute() é genérico: ele retorna true se a instrução produziu um ResultSet (que deve ser obtido com getResultSet()) ou false se produziu uma contagem de atualização. Ele não é o único método, nem é obrigatório para consultas. O método específico e mais direto para consultas é executeQuery().
Alternativa D — ❌ Incorreta
Não existe um método chamado executeResult() na API JDBC. A alternativa inventa um método inexistente, atribuindo-lhe características fictícias como "substituir o executeQuery() em versões modernas do Java". Isso é pura invenção, sem qualquer fundamento na documentação oficial do JDBC.
Alternativa E — ✅ Correta ⟵ GABARITO
executeQuery() é o método da interface Statement (e PreparedStatement) projetado especificamente para executar instruções SQL de consulta (SELECT). Ele retorna um objeto ResultSet contendo as tuplas recuperadas, que podem ser iteradas com o método next(). Essa é exatamente a necessidade do desenvolvedor no enunciado: consultar todos os alunos de um curso e exibir os resultados.
PEGA ESSA DICA!
Para fixar, lembre-se da tríade: executeQuery() → ResultSet (consulta); executeUpdate() → int (atualização); execute() → boolean (genérico). Quando a instrução é um SELECT, a escolha é sempre executeQuery().