Statement.execute(sql) vs executeUpdate(sql) și executeQuery(sql) (Programare, Java, Jdbc, Resultset)

Rollerball a intrebat.

Am o întrebare legată de această metodă: st.execute(sql); unde st este evident un obiect Statement.direct din acest oracle java tutorial:

execute: Returnează adevărat dacă primul obiect pe care îl returnează interogarea este un obiect ResultSet. Utilizați această metodă dacă interogarea ar putea returna unul sau mai multe obiecte ResultSet. Recuperați obiectele ResultSet returnate de interogare prin apelarea repetată a metodei Statement.getResutSet.

Ce se înțelege prin „unul sau mai multe obiecte ResultSet„? Cum este posibil să le gestionați odată ce ați obținut un array de ResultSet? Întrucât st.executeQuery(sql) și st.executeUpdate(sql) sunt foarte clare. Nu este (cel puțin pentru mine) scopul lui st.execute(sql) care, de asemenea, poate returna un int ca și cum ar fi actualizat un tabel.

Vă mulțumim anticipat

3 răspunsuri
Ștefan C

Ce înțeleg prin „unul sau mai multe obiecte ResultSet”?

Javadocul pentru execute spune următoarele:

Execută instrucțiunea SQL dată, care poate returna mai multe rezultate. În unele situații (mai puțin frecvente), o singură instrucțiune SQL poate returna mai multe seturi de rezultate și/sau numere de actualizare. În mod normal, puteți ignora acest lucru, cu excepția cazului în care (1) executați o procedură stocată despre care știți că poate returna rezultate multiple sau (2) executați în mod dinamic un șir SQL necunoscut.

Asta explică destul de bine. Uneori, o interogare poate furniza mai mult de un ResultSet.

dacă este așa, cum este posibil să le gestionați odată ce ați obținut o matrice de ResultSet?

Nu știu sigur ce vrei să spui, dar:

  • nu le puteți obține ca o matrice: trebuie să le obțineți pe rând și
  • ați putea pune ResultSet-urile într-un array…

Nu acesta este (cel puțin pentru mine) scopul lui st.execute(sql) care poate, de asemenea, să returneze un int ca și cum ar fi actualizat un tabel.

O utilizare a execute este de a executa o instrucțiune SQL în cazul în care nu se știe dacă este vorba de o interogare, o actualizare (de un anumit tip) … sau altceva care ar putea furniza mai multe seturi de rezultate. Este o generalizare a lui executeQuery() și executeUpdate()

Comentarii

  • (Notă pentru editori – folosesc în mod deliberat blocurile de citate și italicele împreună pentru lucrurile care sunt citate dintr-un document definitiv, și doar blocurile de citate pentru citatele din întrebarea sau comentariile originale. Vă rog să nu interveniți în formatare. Dacă aveți probleme cu citirea caracterelor italice în browserul dvs., schimbați fonturile implicite sau dimensiunea textului…) –  > Por Stephen C.
Kaveh Safavi

boolean execute():Execută instrucțiunea SQL din acest obiect Prepared Statement, care poate fi orice tip de instrucțiune SQL.

ResultSet executeQuery():Execută interogarea SQL din acest obiect Prepared Statement și returnează obiectul ResultSet generat de interogare.

int executeUpdate():Execută instrucțiunea SQL din acest obiect Prepared Statement, care trebuie să fie o instrucțiune SQL INSERT, UPDATE sau DELETE; sau o instrucțiune SQL care nu returnează nimic, cum ar fi o instrucțiune DDL.

Cel mai bun loc pentru a găsi răspunsuri la astfel de întrebări este Javadocs:Aici

Comentarii

satish kendre

execute() : Metoda utilizată pentru toate tipurile de instrucțiuni SQL, și anume, returnează o valoare booleană de TRUE sau FALSE. În cazul în care metoda returnează TRUE, returnează obiectul ResultSet, iar FALSE returnează valoarea int.

executeUpdate() : Această metodă este utilizată pentru executarea instrucțiunilor DML (INSERT, UPDATE și DELETE) care returnează o valoare int, adică numărul de rânduri afectate.

executeQuery() : Această metodă este utilizată pentru a prelua date din baza de date utilizând interogarea SELECT. Această metodă returnează obiectul ResultSet care returnează datele în conformitate cu interogarea.