Junior
Aký je rozdiel medzi metódami execute, executeQuery a executeUpdate?
sobes.tech AI
Odpoveď od AI
Metódy execute, executeQuery a executeUpdate sa používajú na vykonávanie SQL dopytov cez JDBC, ale sú určené pre rôzne typy dopytov a vracajú rôzne výsledky.
-
executeQuery(String sql):- Je určená na vykonávanie SQL dopytov typu
SELECT. - Vracia objekt
ResultSet, ktorý obsahuje výsledky dopytu. - Vyhadzuje výnimku
SQLException, ak dopyt nie jeSELECT.
// Príklad použitia executeQuery String sql = "SELECT COUNT(*) FROM users"; try (ResultSet rs = statement.executeQuery(sql)) { if (rs.next()) { int userCount = rs.getInt(1); System.out.println("Počet používateľov: " + userCount); } } catch (SQLException e) { e.printStackTrace(); } - Je určená na vykonávanie SQL dopytov typu
-
executeUpdate(String sql):- Je určená na vykonávanie SQL dopytov typu
INSERT,UPDATEaleboDELETE. - Môže byť tiež použitá na vykonávanie DDL príkazov (napr.
CREATE TABLE,ALTER TABLE). - Vracia celé číslo (
int), ktoré predstavuje počet ovplyvnených riadkov alebo 0. - Vyhadzuje výnimku
SQLException, ak dopyt vraciaResultSet.
// Príklad použitia executeUpdate String sql = "UPDATE products SET price = price * 1.1 WHERE category = 'electronics'"; try { int updatedRows = statement.executeUpdate(sql); System.out.println("Aktualizovaných riadkov: " + updatedRows); } catch (SQLException e) { e.printStackTrace(); } - Je určená na vykonávanie SQL dopytov typu
-
execute(String sql):- Univerzálna metóda na vykonanie akéhokoľvek typu SQL dopytu.
- Vracia
boolean:true, ak je výsledokResultSet(preSELECT), afalse, ak je výsledok počet ovplyvnených riadkov alebo nič (preINSERT,UPDATE,DELETE, DDL). - Na získanie skutočného výsledku po
execute:- Ak
executevrátilotrue, použitegetResultSet()na získanieResultSet. - Ak
executevrátilofalse, použitegetUpdateCount()na získanie počtu ovplyvnených riadkov.
- Ak
// Príklad použitia execute String sql = "CREATE TABLE IF NOT EXISTS logs (id INT PRIMARY KEY, message VARCHAR(255))"; try { boolean isResultSet = statement.execute(sql); if (isResultSet) { // Toto je `SELECT` dopyt try (ResultSet rs = statement.getResultSet()) { // Spracovanie výsledkov } } else { // Toto je `INSERT`, `UPDATE`, `DELETE` alebo DDL dopyt int updateCount = statement.getUpdateCount(); System.out.println("Počet ovplyvnených riadkov alebo DDL výsledok: " + updateCount); } } catch (SQLException e) { e.printStackTrace(); }
V tabuľke nižšie sú uvedené hlavné rozdiely:
| Metóda | Typ SQL dopytu | Vrátená hodnota | Príklady dopytov |
|---|---|---|---|
executeQuery |
SELECT |
ResultSet |
SELECT * FROM users |
executeUpdate |
INSERT, UPDATE, DELETE, DDL |
int (počet ovplyvnených riadkov alebo 0) |
INSERT INTO, UPDATE users, DROP TABLE |
execute |
Akýkoľvek | boolean (true, ak ResultSet; false, ak nie) |
Akýkoľvek |
Obvykle sa odporúča používať špecifickejšie metódy (executeQuery, executeUpdate), keď je typ dopytu vopred známy, pretože to zvyšuje jasnosť kódu a umožňuje kompilátoru alebo IDE vykonávať presnejšie kontroly. Metóda execute sa používa v prípadoch, keď môže byť typ dopytu dynamický alebo neznámy vopred.