Skip to content
閲覧中:
100本ノック

100本ノック

JDBCとNIO.2は、Java Gold試験において「暗記」と「コードの読み取り能力」の両方が試される分野です。特にJDBCのメソッド名や、NIO.2のPath計算は1問のミスが合否を分ける重要ポイントです。

各50項目、合計100個のチェックポイントを整理しました。


1. JDBC:データベース連携 (1-50)

JDBCの基本構造と接続 (1-10)

  1. JDBC URL: jdbc:subprotocol:subname の形式(例: jdbc:derby:zoo)。
  2. DriverManager: 接続管理。getConnection(url, user, pass)Connection を取得。
  3. Connection: DBへのセッション。try-with-resources でのクローズが必須。
  4. Statement: SQLを実行する器。
  5. ResultSet: SELECT の実行結果を保持する表形式のデータ。
  6. SQLException: ほぼ全てのJDBCメソッドが投げるチェック例外。
  7. ドライバのロード: JDBC 4.0以降、Class.forName() は原則不要。
  8. SQLインジェクション: 変数を直接文字列連結してSQLを作ることの危険性。
  9. クローズ順序: ResultSetStatementConnection(開いたのと逆順)。
  10. リソース管理: try(Connection c; Statement s; ResultSet r) のようにセミコロンで区切って記述可能。

    SQLの実行と結果の取得 (11-25)

  11. executeQuery(): SELECT 文に使用。ResultSet を返す。

  12. executeUpdate(): INSERT/UPDATE/DELETE に使用。更新された「行数(int)」を返す。
  13. execute(): 任意のSQL。戻り値は booleanResultSet が得られればtrue)。
  14. rs.next(): カーソルを一行進める。データがあればtrue。
  15. カーソルの初期位置: 「1行目の前」(Before First)。
  16. カラムの指定: インデックスは 1から始まる(0ではない)。
  17. データ型: rs.getInt(), rs.getString(), rs.getObject() など。
  18. PreparedStatement: SQLを事前コンパイル。パラメータは ? で指定。
  19. ps.setXxx(index, value): ? への値セット。これもインデックスは1から。
  20. セキュリティ: PreparedStatement はSQLインジェクション対策の基本。
  21. CallableStatement: ストアドプロシージャの呼び出しに使用。
  22. cs.registerOutParameter(): プロシージャの出力値を登録。
  23. wasNull(): 直前に読み込んだ値がSQLの NULL だったか判定。
  24. DB型とJava型: DATEjava.sql.Date, TIMESTAMPjava.sql.Timestamp
  25. 日付の扱い: java.util.Date ではなく java.sql.Date を使う。

    スクロールと更新可能ResultSet (26-40)

  26. TYPE_FORWARD_ONLY: 前方にのみ進める(デフォルト)。

  27. TYPE_SCROLL_INSENSITIVE: 前後移動可。実行中のDB変更は反映されない。
  28. TYPE_SCROLL_SENSITIVE: 前後移動可。実行中のDB変更が反映される。
  29. CONCUR_READ_ONLY: 読み取り専用(デフォルト)。
  30. CONCUR_UPDATABLE: ResultSet経由でDBを更新できる。
  31. rs.absolute(int): 指定した行へ移動(負の数は末尾から)。
  32. rs.relative(int): 現在地から相対的に移動。
  33. rs.previous(): 一つ前に戻る。
  34. **rs.beforeFirst() / rs.afterLast()**: 両端への移動。
  35. **rs.last() / rs.first()**: 最終行/先頭行への移動。
  36. rs.updateString(col, val): ResultSet内の値を変更(DB未反映)。
  37. rs.updateRow(): 変更をDBに反映させる。
  38. rs.cancelRowUpdates(): updateRow() 前なら変更を取消可能。
  39. rs.moveToInsertRow(): 新規行挿入のための待機場所へ移動。
  40. rs.insertRow(): 新規行をDBに挿入。

    トランザクション管理 (41-50)

  41. AutoCommit: デフォルトはtrue(一文ごとに即確定)。

  42. setAutoCommit(false): トランザクションの開始。
  43. commit(): 全ての変更を確定。
  44. rollback(): 最後のコミット以降の変更を取消。
  45. 分離レベル: TRANSACTION_READ_COMMITTED など。
  46. Savepoint: トランザクション内の特定地点への目印。
  47. conn.setSavepoint(): セーブポイント作成。
  48. conn.rollback(savepoint): 特定地点まで戻す。
  49. conn.releaseSavepoint(savepoint): セーブポイントの破棄。
  50. 例外時のロールバック: catch ブロック内で明示的に呼ぶのが基本。

    2. NIO.2:ファイル操作 (51-100)

    ** Pathインターフェースの基本 (51-65)**

  51. Path: ファイルやディレクトリの位置を表す。実体があるとは限らない。

  52. Paths.get(): Pathの生成。
  53. Path.of(): Java 11以降のPath生成メソッド。
  54. normalize(): ... を解消したパスにする。
  55. relativize(): あるパスから別のパスへの相対パスを計算。
  56. resolve(): 2つのパスを結合する。
  57. getNameCount(): パス要素の数。
  58. getName(index): 指定した位置の要素を取得。
  59. subpath(begin, end): パスの一部を切り出す。
  60. **getParent() / getFileName() / getRoot()**: 階層情報の取得。
  61. **isAbsolute() / toAbsolutePath()**: 絶対パス判定と変換。
  62. toRealPath(): リンク等を解決した「本当の」絶対パスを取得(存在確認も行う)。
  63. Path の反復処理: for(Path p : path) で要素ごとにループ可能。
  64. 比較: equals() はパス文字列を比較する(物理的な同一性は見ない)。
  65. ファイルシステム: FileSystems.getDefault()

    Filesクラス(静的メソッド) (66-85)

  66. Files.exists(path): 存在確認。

  67. Files.isSameFile(p1, p2): 物理的に同じファイルを指しているか(存在確認を伴う)。
  68. Files.createDirectory(path): 1階層作成。
  69. Files.createDirectories(path): 親階層含めて作成。
  70. Files.copy(src, target): コピー。
  71. Files.move(src, target): 移動またはリネーム。
  72. Files.delete(path): 削除(存在しないと例外)。
  73. Files.deleteIfExists(path): 削除(なくても例外なし)。
  74. REPLACE_EXISTING: コピー/移動時の上書きオプション。
  75. COPY_ATTRIBUTES: 属性も含めてコピーするオプション。
  76. Files.readAllLines(path): 全行を List<String> で取得。
  77. Files.lines(path): ファイルを Stream として取得(メモリ効率が良い)。
  78. Files.newBufferedReader(path): Readerの取得。
  79. Files.size(path): ファイルサイズ(byte)取得。
  80. 基本属性: readAttributes(path, BasicFileAttributes.class)
  81. BasicFileAttributes: creationTime, lastModifiedTime, size, isDirectory 等。
  82. FileTime: NIO.2で時間を表すクラス。
  83. Files.setAttribute(): 特定の属性を更新。
  84. PosixFileAttributes: UNIX系独自の属性(パーミッション等)。
  85. Files.isSymbolicLink(): シンボリックリンク判定。

    ファイルの探索と再帰処理 (86-100)

  86. Files.list(path): 指定ディレクトリ直下の要素をStreamで返す。

  87. Files.walk(path): サブディレクトリ含め再帰的に全要素をStreamで返す(深さ優先)。
  88. Files.find(path, depth, BiPredicate): 条件に合うファイルを再帰的に探す。
  89. Streamのクローズ: walk 等は try-with-resources で閉じるべき。
  90. FileVisitor: 再帰処理の各工程を制御するインターフェース。
  91. SimpleFileVisitor: FileVisitorの全メソッドを空実装したクラス。
  92. preVisitDirectory: ディレクトリに入る前の処理。
  93. visitFile: ファイル到達時の処理。
  94. visitFileFailed: アクセス失敗時の処理。
  95. postVisitDirectory: ディレクトリから出る時の処理。
  96. FileVisitResult.CONTINUE: 探索を継続。
  97. FileVisitResult.TERMINATE: 探索を即座に終了。
  98. FileVisitResult.SKIP_SUBTREE: そのディレクトリ下の探索を中止。
  99. FileVisitResult.SKIP_SIBLINGS: 同じ階層の残りの探索を中止。
  100. PathMatcher: glob:*.java などのパターンでファイル名を判定。

💡 試験合格へのアドバイス

  1. JDBC: rs.next() を呼ばずに rs.get...() を呼んでいるコードはエラーです。また、SQLExceptiontry-catch されているかを必ず確認してください。
  2. NIO.2: p1.relativize(p2) の計算(p1からp2へどう行くか)を紙に書いて練習してください。ルートが違うパス同士の relativize は例外を投げます。

次は、JDBCの 「PreparedStatementの詳細な使い方」 か、NIO.2の 「Path計算のシミュレーション問題」 を深掘りしますか?

なお、各種アプリのすべての機能を使用するには、Gemini アプリ アクティビティを有効にする必要があります。