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選
試験では、ただの 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
ResultSetのgetXXXメソッドの引数は、取得したい「カラムの番号」を指定します(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をキャッチしているか?


コメント