Java Gold SE11対策:execute系3メソッドの違いを完全整理:JDBCの3兄弟を使いこなせ!

JDBCでは、SQLを実行する際に使うメソッドがいくつかあります。
中でも以下の3つは Java Goldでも高確率で問われるポイントです。
- execute()
- executeQuery()
- executeUpdate()
どれを使ってもSQLは実行できますが、それぞれの 役割・戻り値・使いどころが違う ので、曖昧なままではミスの元。
この回では、この3つの違いをしっかり整理して、試験にも実務にも強くなりましょう。
目次
結論:3つのメソッドの違いをざっくり表にすると
メソッド | 主に使うSQL | 戻り値の型 | 戻り値の意味 |
executeQuery() | SELECT | ResultSet | 結果セット(表形式データ) |
executeUpdate() | INSERT/UPDATE/DELETE | int | 影響を受けた行数 |
execute() | なんでも(万能型) | boolean | true → 結果セットあり(SELECT)false → 結果セットなし(更新系) |
executeQuery() の特徴
- 用途: SELECT 文の実行専用
- 戻り値: ResultSet(結果表)
- 例:
PreparedStatement ps = conn.prepareStatement(“SELECT * FROM users”);
ResultSet rs = ps.executeQuery();
- ❌ INSERT などを実行すると SQLException が発生する → SELECT専用 と覚える!
executeUpdate() の特徴
- 用途: INSERT, UPDATE, DELETE などの更新系SQL
- 戻り値: int(影響を受けた行数)
- 例:
PreparedStatement ps = conn.prepareStatement(“DELETE FROM users WHERE id = ?”);
ps.setInt(1, 1001);
int affectedRows = ps.executeUpdate(); // ← 成功した件数が返る
- ❌ SELECT 文を実行すると SQLException → 更新系専用!
execute() の特徴
- 用途: SELECT も UPDATE も何でもOK(ちょっと上級者向け)
- 戻り値: boolean
- true:ResultSet が返ってくる(= SELECT)
- false:更新系SQL(結果セットなし)
- true:ResultSet が返ってくる(= SELECT)
- 例:
Statement stmt = conn.createStatement();
boolean hasResultSet = stmt.execute(“SELECT * FROM users”);
if (hasResultSet) {
ResultSet rs = stmt.getResultSet();
// 結果セットを処理
} else {
int updated = stmt.getUpdateCount();
// 更新行数を処理
}
- 柔軟性が高いが、その分使い方がやや複雑。
→ 通常は executeQuery() / executeUpdate() を使う方が安全!
試験での狙われポイント
ひっかけ例 | 注意点 |
ps.executeQuery(“UPDATE …”) | ❌ エラー(SELECT以外は不可) |
ps.executeUpdate(“SELECT …”) | ❌ エラー(更新系以外は不可) |
stmt.execute(…) の戻り値で処理を分けてない | ❌ 結果を取り出せない or 無視される |
execute() だけ使ってるけど行数がほしい | ❌ getUpdateCount() を呼ばなければ分からないexecute() を使う場合、自分で ResultSet or 更新かを判定し、追加で getUpdateCount() を呼ばないと行数は取れない |
コーディング時の選び方ガイド
使いたいSQL | 使うべきメソッド |
SELECT | executeQuery() |
INSERT/UPDATE/DELETE | executeUpdate() |
ストアドプロシージャなど何が返るか分からない | execute()(中〜上級向け) |
おまけ:executeQuery() の戻り値 ResultSet の扱い
ResultSet は、結果セット(表形式データ)を行ごとに操作するためのAPI。
基本的な流れは:
while (rs.next()) {
int id = rs.getInt(“id”);
String name = rs.getString(“name”);
}
この next() は、次の行があるかどうかを判定し、あればカーソルを進めます。
→ false になったら終わり。
このあたりも試験で ResultSet の処理順などが問われるので、しっかり押さえておきましょう。
まとめ:要点
メソッド | 主な用途 | 注意点 |
executeQuery() | SELECT | 結果セット(ResultSet)が返る |
executeUpdate() | INSERT/UPDATE/DELETE | 行数(int)が返る |
execute() | 全て対応 | true/falseで分岐が必要 |