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

アイキャッチ画像

JDBCでは、SQLを実行する際に使うメソッドがいくつかあります。
中でも以下の3つは Java Goldでも高確率で問われるポイントです。

  • execute()
  • executeQuery()
  • executeUpdate()

どれを使ってもSQLは実行できますが、それぞれの 役割・戻り値・使いどころが違う ので、曖昧なままではミスの元。
この回では、この3つの違いをしっかり整理して、試験にも実務にも強くなりましょう。

結論:3つのメソッドの違いをざっくり表にすると

メソッド主に使うSQL戻り値の型戻り値の意味
executeQuery()SELECTResultSet結果セット(表形式データ)
executeUpdate()INSERT/UPDATE/DELETEint影響を受けた行数
execute()なんでも(万能型)booleantrue → 結果セットあり(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(結果セットなし)
  • 例:

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使うべきメソッド
SELECTexecuteQuery()
INSERT/UPDATE/DELETEexecuteUpdate()
ストアドプロシージャなど何が返るか分からない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で分岐が必要