web-dev-qa-db-fra.com

Statement.execute (sql) vs executeUpdate (sql) et executeQuery (sql)

J'ai une question liée à cette méthode: st.execute(sql); où st est évidemment un objet Statement. Directement depuis this Oracle Java:

execute: renvoie true si le premier objet renvoyé par la requête est un objet ResultSet. Utilisez cette méthode si la requête peut renvoyer un ou plusieurs objets ResultSet. Récupérez les objets ResultSet renvoyés par la requête en appelant à plusieurs reprises Statement.getResutSet.

Que signifie " un ou plusieurs objets ResultSet"? Comment est-il possible de les gérer une fois obtenu un tableau de ResultSet? Alors que st.executeQuery(sql) et st.executeUpdate(sql) sont très clairs. Ce n'est pas (du moins pour moi) le but de st.execute(sql) qui peut aussi retourner un int comme s'il s'agissait d'une table mise à jour.

Merci d'avance

28
Rollerball

Que signifient-ils par "un ou plusieurs objets ResultSet"?

Le javadoc de la méthode execute dit ceci:

"Exécute l'instruction SQL donnée, qui peut renvoyer plusieurs résultats. Dans certaines situations (peu courantes), une seule instruction SQL peut renvoyer plusieurs jeux de résultats et/ou comptes de mise à jour. Normalement, vous pouvez ignorer cela sauf si vous êtes (1) l'exécution d'une procédure stockée dont vous savez qu'elle peut renvoyer plusieurs résultats ou (2) vous exécutez dynamiquement une chaîne SQL inconnue. "

Cela explique à peu près cela. Parfois, une requête peut fournir plusieurs ResultSet.

si oui, comment est-il possible de les gérer une fois obtenu un tableau de ResultSet?

Je ne sais pas ce que tu veux dire mais:

  • vous ne pouvez pas les obtenir sous forme de tableau: vous devez les obtenir un à la fois, et
  • vous pouvez mettre les ResultSets dans un tableau ...

Ce n'est pas (du moins pour moi) le but de st.execute (sql) qui peut également retourner un int comme s'il avait été mis à jour une table.

Une utilisation de execute est d'exécuter une instruction SQL si vous ne savez pas s'il s'agit d'une requête, d'une mise à jour (d'une sorte) ... ou de quelque chose d'autre qui fournit potentiellement plusieurs jeux de résultats. C'est une généralisation de executeQuery() et executeUpdate() ...

12
Stephen C

booléen execute (): Exécute l'instruction SQL dans cet objet Instruction préparée, qui peut être n'importe quel type d'instruction SQL.

ResultSet executeQuery (): Exécute la requête SQL dans cet objet Instruction préparée et renvoie l'objet ResultSet généré par la requête.

int executeUpdate (): Exécute l'instruction SQL dans cet objet Instruction préparée, qui doit être une instruction SQL INSERT, UPDATE ou DELETE; ou une instruction SQL qui ne renvoie rien, telle qu'une instruction DDL.

Le meilleur endroit pour trouver des réponses à des questions comme celle-ci est les Javadocs: ici

10
Kaveh Safavi