JDBCによるデータベース連携完全攻略|Java Gold頻出ポイントと実戦例題

【Java Gold対策】

Java Gold(SE11/17)試験において、必ず得点源にしたいのが**「JDBC(Java Database Connectivity)」**です。 「JDBCとは何か?」という基礎から、試験で狙われる「1始まりのインデックス」や「リソースの自動クローズ」まで、現役エンジニアが徹底解説します。


目次

1. JDBCとは?データベース接続の共通ルール

JDBCとは、Javaプログラムからデータベース(MySQL, PostgreSQL, Oracleなど)に接続し、SQLを実行するための標準APIです。

Javaには、DBの種類を問わず共通のコードで操作できるように「共通の窓口」が用意されています。

JDBC APIとドライバの役割

  • JDBC API: java.sqlパッケージに含まれるインターフェース群。私たちが書くコード。
  • JDBCドライバ: 各DBメーカーが提供する「通訳」。SQLをDB専用の言語に翻訳します。

[参考リンク] 詳しいメソッド仕様はOracle公式:java.sqlリファレンス(外部リンク)も参照してください。


2. JDBC接続の基本フロー(4ステップ)

STEP1:Connection(接続)の確立

DriverManager.getConnection(url, user, password) でDBと接続します。

STEP2:Statement(乗り物)の作成

SQLを運ぶためのオブジェクトを作ります。試験では PreparedStatement がメインです。

STEP3:SQLの実行とResultSet(結果)の取得

executeQuery() でデータを取り出し、結果を ResultSet に格納します。

STEP4:リソースの解放(Close)

接続を閉じます。現在は try-with-resources による自動クローズが標準です。


3. 【最重要】試験に出る「ひっかけ」3選

[CAUTION] インデックスは「1」から始まる! 配列は0始まりですが、JDBCのプレースホルダ(?)や列指定は1始まりです。 pstmt.setInt(1, 100); ← 0を指定すると例外が発生します。

試験では、ただの Statement よりも PreparedStatement が好まれます。

  • SQLインジェクション対策: パラメータを安全に処理。
  • パフォーマンス: 事前にコンパイルされるため、繰り返し実行に強い。

② ResultSetのカーソル操作

ResultSet を取得した直後、カーソルは**「1行目の手前」**にあります。

  • rs.next() を呼ばずに rs.getString() などを呼ぶと例外になります。

4. 【全5問】合格を掴む!Java Gold 実戦演習

JDBCの試験問題は「コードの穴埋め」や「実行結果の予想」が中心です。以下の例題で、自分の理解度をチェックしましょう。

【第1問】基本構造とインターフェース

次のコードの空欄(A)に入る最も適切な型はどれですか? var conn = DriverManager.getConnection(url, user, pass); (A) stmt = conn.createStatement(); A. Statement B. PreparedStatement C. ResultSet D. Connection

正解:A createStatement()Statement 型を返します。

【第2問】プレースホルダのインデックス

次のコードを実行した際の結果として正しいものはどれですか? var pstmt = conn.prepareStatement("UPDATE p SET price = ? WHERE id = ?"); pstmt.setInt(0, 1500); A. 正常に更新される B. 実行時に SQLException が発生する C. コンパイルエラー D. 何も起きない

正解:B インデックスは1から始まります。0を指定すると実行時に例外がスローされます。

【第3問】ResultSetのカーソル操作

2件のレコードがある状態で、次のコードを実行した結果はどうなりますか? var rs = stmt.executeQuery("SELECT name FROM users"); System.out.println(rs.getString(1)); A. 1番目のレコードが表示される B. null が表示される C. SQLException が発生する D. コンパイルエラー

正解:C 実行直後は「1行目の手前」にカーソルがあるため、rs.next() を呼ばないとデータにアクセスできません。

【第4問】executeUpdateの戻り値

int result = pstmt.executeUpdate(); の実行後、result に格納されるものは何ですか? A. ResultSet オブジェクト B. 更新に成功したかどうかの boolean C. 影響を受けた行数(int) D. 最後に挿入されたID

正解:C 更新系(INSERT/UPDATE/DELETE)の戻り値は、影響を受けた行数を示す int です。

【第5問】リソースのクローズ順序

try-with-resourcesで Connection, Statement, ResultSet をこの順で宣言した際、クローズされる順序は? A. 宣言した順(Conn → Stmt → RS) B. 宣言と逆の順(RS → Stmt → Conn) C. 順序は決まっていない D. 最後に Connection だけが閉じられる

正解:B リソースは宣言された順序とは逆(後入れ先出し)で自動クローズされます。

【第6問】PreparedStatementの生成

PreparedStatement を生成する正しい方法はどれですか? A. new PreparedStatement(sql); B. conn.createStatement(sql); C. conn.prepareStatement(sql); D. DriverManager.getPreparedStatement(sql);

正解:C Connection オブジェクトの prepareStatement(sql) メソッドを使用します。

【第7問】SQL実行メソッドの使い分け

SELECT文を実行する際に使用する適切なメソッドはどれですか? A. execute() B. executeUpdate() C. executeQuery() D. commit()

正解:C 問い合わせ(SELECT)には executeQuery() を使用し、ResultSet を受け取ります。

【第8問】SQLExceptionの性質

java.sql.SQLException に関する記述として正しいものはどれですか? A. 非チェック例外(Runtime)である B. チェック例外である C. java.io.IOException を継承している D. try-catch は任意である

正解:B SQLException はチェック例外であるため、try-catch または throws によるハンドリングが必須です。

【第9問】ResultSetのデータ取得

rs.getString(1) の引数「1」が指すものは何ですか? A. 1行目のデータ B. 1番目の列(カラム)のデータ C. 最初のインデックス(0番目) D. 主キーの数

正解:B ResultSetgetXXX メソッドの引数は、取得したい「カラムの番号」を指定します(1始まり)。

【第10問】JDBCドライバの役割

JDBCドライバの役割として適切な説明はどれですか? A. Javaコードをコンパイルする B. データベースごとの固有の差を吸収し、Java共通の命令を翻訳する C. SQL文の文法エラーをチェックする D. データベースそのものを構築する

正解:B 各DBメーカーが提供するドライバが、共通APIの命令をDB専用の通信に変換します。

5. まとめ:JDBC攻略チェックリスト

  • [ ] DriverManager.getConnection() の戻り値は Connection か?
  • [ ] プレースホルダのインデックスは 1始まり か?
  • [ ] try-with-resources で正しくリソース管理しているか?
  • [ ] SQLException をキャッチしているか?
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

tibiyaのアバター tibiya ITエンジニア

文系卒あほエンジニア
趣味はゲームとギャンブルとテニスっぽいスポーツと釣りです
Java javascript angular react C#

コメント

コメントする

目次