1. JDBC:データベース連携 (1-50)
JDBC(Java Database Connectivity)の1番から50番までの項目を、試験に出るポイントを凝縮したサンプルコードと共に解説します。
1-10. JDBCの基本構造と接続¶
ここでは「接続の作法」が問われます。
Java
// 1. JDBC URL: jdbc:サブプロトコル:データソース名
String url = "jdbc:derby:zoo";
// 2, 3, 10. DriverManagerとConnection、リソース管理
// 6. JDBC 4.0以降はClass.forName()不要
try (Connection conn = DriverManager.getConnection(url); // 接続取得
Statement stmt = conn.createStatement()) { // 4. Statement作成
// 7. SQLExceptionはチェック例外。このブロック内で必須。
System.out.println("Connected!");
} catch (SQLException e) {
e.printStackTrace();
}
// 9. try-with-resourcesにより、ResultSet -> Statement -> Connectionの順で自動クローズ
11-25. 実行と結果取得¶
試験で最も「ひっかけ」が出るゾーンです。
Java
// 18. PreparedStatement: SQLを事前コンパイル。再利用可能で安全
String sql = "SELECT id, name FROM animals WHERE age > ?";
try (Connection conn = DriverManager.getConnection(url);
PreparedStatement ps = conn.prepareStatement(sql)) {
// 19. ? へのセット。インデックスは 1 から始まる(重要!)
ps.setInt(1, 5);
// 11. executeQuery(): SELECTに使用。ResultSetを返す
// 13. execute(): 戻り値はboolean。ResultSetが得られればtrue
try (ResultSet rs = ps.executeQuery()) {
// 14. rs.next(): 最初は「1行目の前」にいるので、必ず1回は呼ぶ必要がある
// 15. 初期位置 = Before First
while (rs.next()) {
// 16. カラム指定も 1 から始まる
int id = rs.getInt(1);
// 17. カラム名での取得も可能
String name = rs.getString("name");
// 23. wasNull(): 直前に読み込んだ値がDB上でNULLだったか判定
if (rs.wasNull()) { /* 処理 */ }
}
}
// 12. executeUpdate(): INSERT/UPDATE/DELETEに使用。戻り値は「更新行数(int)」
int result = ps.executeUpdate("UPDATE animals SET name = 'Jack' WHERE id = 1");
}
26-40. スクロールと更新可能ResultSet¶
ResultSetを自由に動かしたり、書き換えたりする高度な設定です。
Java
// 26-30. ResultSetの型と並行性の設定
try (Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE, // 27. 前後移動可・DB変更は非反映
ResultSet.CONCUR_UPDATABLE)) { // 30. ResultSet経由でDB更新可
ResultSet rs = stmt.executeQuery("SELECT * FROM animals");
// 35. 最終行へ
rs.last();
// 31. absolute(int): 絶対位置へ移動(2行目へ)
rs.absolute(2);
// 32. relative(int): 現在地から移動(1つ戻る)
rs.relative(-1);
// 36, 37. ResultSet経由の更新
rs.updateString("name", "New Name");
rs.updateRow(); // これを呼ばないとDBに反映されない
}
41-50. トランザクション¶
「一連の処理をひとまとめにする」仕組みです。
Java
try (Connection conn = DriverManager.getConnection(url)) {
// 41, 42, 44. AutoCommitをfalseにするとトランザクション開始
conn.setAutoCommit(false);
try (Statement stmt = conn.createStatement()) {
stmt.executeUpdate("UPDATE account SET balance = balance - 100 WHERE id = 1");
// 46, 47. セーブポイントの作成
Savepoint sp = conn.setSavepoint("PointA");
stmt.executeUpdate("UPDATE account SET balance = balance + 100 WHERE id = 2");
// 43. 全て成功すれば確定
conn.commit();
} catch (SQLException e) {
// 44, 48. 失敗したらロールバック(セーブポイント指定も可)
conn.rollback();
}
}
💡 Java Gold 試験対策:JDBCの「ひっかけ」最終確認表¶
| 項目 | 正解(試験のポイント) | よくある間違い |
|---|---|---|
| 開始インデックス | 1 | 0 |
| ResultSetの初期位置 | 1行目の前 (Before First) | 1行目 |
| ps.setInt(1, 10) | **PreparedStatement**に値をセット | Statementにセット |
| executeUpdate()の戻り値 | 更新された行数 (int) | ResultSet または boolean |
| rs.next() | boolean(データがあればtrue) | void または データそのもの |
これでJDBCの1-50番を網羅しました。
次は、パスの計算やファイルの再帰探索がメインとなる 「NIO.2:ファイル操作 (51-100)」 のサンプルコード解説に進みますか?