JDBC 面接の重要な 50 の質問と専門家による回答 (2026)

JDBC 面接の準備には、データベース接続、パフォーマンス調整、セキュリティのベスト プラクティスを深く理解する必要があります。次の 50 の質問は、採用担当者が優先する中心的な概念と現実世界のシナリオをカバーしています。
👉 無料 PDF ダウンロード:JDBC インタビューの質問と回答
1) JDBC とは何ですか? Java アプリケーションで JDBC が重要なのはなぜですか?
JDBC (Java Database Connectivity) は、Java プログラムがリレーショナル データベースと対話できるようにするコア API です。これにより、SQL の実行、結果処理、トランザクション制御が標準化され、開発者は最小限の変更で MySQL、Oracle、PostgreSQL などを切り替えることができるデータベースに依存しないコードを作成できるようになります。
2) 4 つの JDBC ドライバー タイプとその主な違いは何ですか?
- タイプ 1 (JDBC‑ODBC ブリッジ) :JDBC を ODBC にブリッジします。使いやすいですが、ODBC が必要で遅い
- タイプ 2 (ネイティブ API) :ネイティブ DB ライブラリを呼び出します。 Type1 よりも高速ですが、プラットフォームに依存します。
- タイプ 3 (ネットワーク プロトコル) :ミドルウェアを使用して通話を変換します。データベースに依存しないが、ネットワーク オーバーヘッドが追加されます。
- Type4 (薄型ドライバー) :Pure Java、DB と直接通信します。最高のパフォーマンスと携帯性。最新のアプリのほとんどは Type4 を使用します。
3) JDBC プログラムのライフサイクルの概要を説明します。
<オル>Class.forName("com.mysql.cj.jdbc.Driver") Connection を確立します DriverManager 経由 または DataSource .Statement を作成します 、PreparedStatement 、または CallableStatement .ResultSet を処理します 該当する場合。try‑with‑resources を推奨します) ).4) Statement、PreparedStatement、または CallableStatement をいつ使用する必要がありますか?
- ステートメント :静的 SQL。 1 回限りのクエリに迅速に対応できる。
- プリペアドステートメント :パラメータ化されたクエリ。 SQL インジェクションから保護し、プリコンパイルによってパフォーマンスを向上させる
- 呼び出し可能なステートメント :ストアド プロシージャまたは関数。複雑な DB ロジックをカプセル化します。
5) JDBC でトランザクションをどのように管理しますか?
<オル>conn.setAutoCommit(false) conn.commit();失敗した場合、conn.rollback() .このパターンは、資金移動などのアトミックな操作に使用します。
6) JDBC 接続プーリングの長所と短所は何ですか?
- 長所 :接続を再利用し、レイテンシを削減し、負荷に応じてスケーリングします。
- 短所 :慎重な構成が必要です。更新しないと、接続が古くなってしまう可能性があります。
HikariCP や Apache DBCP などのフレームワークは業界標準です。
7)execute()、executeQuery()、およびexecuteUpdate()を区別します。
execute():任意の SQL。booleanを返しますResultSetかどうかを示すexecuteQuery():SELECT ステートメント。ResultSetを返します .executeUpdate():挿入、更新、削除;影響を受ける行数を返します。
8) JDBC のパフォーマンスを向上させる戦略は何ですか?
PreparedStatementを使用します プリコンパイル用。addBatch()/executeBatch()によるバッチ更新 .- 接続プーリング。
- 必要な列のみを選択します。
- リソースを速やかに閉じます。
9) JDBC でのバッチ更新について説明します。
PreparedStatement ps = conn.prepareStatement("INSERT INTO student VALUES(?,?)");
for(int i=1;i<=1000;i++){
ps.setInt(1,i);
ps.setString(2,"Name"+i);
ps.addBatch();
}
ps.executeBatch(); 往復を削減し、スループットを向上させます。
10) ResultSet はどのような役割を果たしますか?
ResultSet はクエリ結果を保持します。作成フラグに応じて、前方のみ、スクロール可能、または更新可能にすることができます。
11) JDBC と ODBC を比較します。
- JDBC:Pure Java、プラットフォームに依存しない、高パフォーマンス
- ODBC:C ベース、プラットフォーム依存、ネイティブ ドライバーが必要
12) JDBC アーキテクチャ コンポーネントを特定します。
<オル>13) ResultSetMetaData と DatabaseMetaData について説明します。
- 結果セットメタデータ :列名、特定のクエリのタイプ。
- データベースメタデータ :ドライバー名、データベース製品、サポートされている SQL 機能。
14) セーブポイントの使用方法は?
conn.setAutoCommit(false);
Savepoint sp = conn.setSavepoint("sp1");
// operations
conn.rollback(sp); // partial rollback
conn.commit(); 15) RowSet とそのバリアントを定義します。
- JdbcRowSet – 接続されています。
- CachedRowSet – 切断されており、シリアル化可能。
- WebRowSet – XML ベース
- FilteredRowSet – フィルターを使用して表示します。
- JoinRowSet – 複数の RowSet を結合します。
16) JDBC は SQL 例外をどのように処理しますか?
SQLException は getErrorCode() を提供します 、getSQLState() 、および getMessage() 。失敗時には必ずログを記録してロールバックしてください。
17) バッチ処理とは何ですか?
複数の DML ステートメントを 1 つのラウンドトリップにグループ化します。 addBatch() を使用してください と executeBatch() .
18) ステートメント タイプを再度リストします。
- ステートメント - 静的 SQL。
- PreparedStatement – パラメータ化されています。
- CallableStatement – ストアド プロシージャ
19) 効率的な接続管理。
DataSource を優先します 接続プーリングを使用します。 try‑with‑resources を使用してください 自動クリーンアップ用。
20) JDBC ステートメントと休止状態セッション。
- JDBC:低レベルの手動マッピング。
- 休止状態:ORM、キャッシュ、自動 SQL 生成。
21) 自動生成されたキーを取得します。
PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); ps.executeUpdate(); ResultSet rs = ps.getGeneratedKeys();
22) BLOB および CLOB の処理。
- BLOB – バイナリ ストリーム。
- CLOB – 文字ストリーム。
23) ResultSet をスクロール/更新可能にします。
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEE");
rs.absolute(3);
rs.updateString("name", "UpdatedName");
rs.updateRow(); 24) データソースとドライバーマネージャー。
- DriverManager – シンプルでプールなし
- データソース – JNDI ルックアップ、プーリング、XA サポート
25) PreparedStatement によるバッチ処理。
for(int i=1;i<=5;i++){
ps.setInt(1,i);
ps.setString(2,"Student"+i);
ps.addBatch();
}
ps.executeBatch(); 26) DatabaseMetaData の使用。
DatabaseMetaData dbmd = conn.getMetaData();
System.out.println("DB: " + dbmd.getDatabaseProductName()); 27) 実行バリアントの要約。
- execute() – ブール値。
- executeQuery() – ResultSet。
- executeUpdate() – 整数
28) JDBC リソースを閉じます。
try (Connection c = ds.getConnection();
Statement s = c.createStatement();
ResultSet rs = s.executeQuery("SELECT * FROM EMPLOYEE")) {
while(rs.next()){ /* process */ }
} 29) 一般的なパフォーマンスの最適化。
- 接続プーリング。
- ステートメントよりも PreparedStatement。
- バッチ更新。
- フェッチ サイズの調整。
- 選択的な列の取得。
30) ストアド プロシージャの呼び出し。
CallableStatement cs = conn.prepareCall("{call getEmployeeSalary(?)}");
cs.setInt(1,101);
ResultSet rs = cs.executeQuery(); 31) JDBC 接続プーリングの内部。
初期化時に、プールは固定の接続セットを作成します。リクエストは接続を借用します。使用後にそれを返し、リソースをメモリ内に保持します。
32) HikariCP を構成します。
HikariConfig cfg = new HikariConfig();
cfg.setJdbcUrl("jdbc:mysql://localhost:3306/testdb");
cfg.setUsername("root");
cfg.setPassword("pw");
cfg.setMaximumPoolSize(10);
HikariDataSource ds = new HikariDataSource(cfg); 33) DriverManager と DataSource。
- DriverManager – 直接、プールなし
- データソース – プール、XA、JNDI。
34) 一般的な「適切なドライバーが見つかりません」の原因。
- ドライバー JAR がクラスパスにありません。
- JDBC URL が正しくありません。
Class.forName()がありません (Java9 より前)。- ドライバーと DB のバージョンが一致しません。
35) SQL インジェクションを防止します。
- 常に
PreparedStatementを使用してください パラメータを使用します。 - ユーザー入力を検証し、サニタイズします。
- DB 権限を制限します。
36) JDBC と ORM (休止状態)。
- JDBC:細かい制御、手動マッピング、軽量。
- 休止状態:自動 ORM、キャッシュ、より高い学習曲線。
37) SQL クエリのログ記録。
- ドライバーのログ記録を有効にする (例:MySQL の
logger=com.mysql.cj.log.StandardLogger) )。 - P6Spy またはデータソース プロキシを使用して傍受し、ログを記録します。
38) JDBC による安全なマルチスレッド。
Connectionを共有しないでください スレッド間のオブジェクト。- スレッドごとにプールから接続を借用します。
- try‑with‑resources を使用してリソースを閉じます。
39) Spring / Spring Boot の JDBC。
春の JdbcTemplate ボイラープレート、例外変換、接続プーリングを自動的に処理します。
40) JDBC 接続の状態。
- 初期化済み → オープン → トランザクション中 → コミット/ロールバック → クローズ
41) ドライバーの種類の要約。
- タイプ 1 – パフォーマンスが低く、ODBC が必要です。
- タイプ 2 – ネイティブ、中程度のパフォーマンス。
- タイプ 3 – ミドルウェア、中程度のパフォーマンス
- Type4 – 純粋な Java、最高のパフォーマンス。
42) トランザクション分離レベル。
- READ_UNCOMMITTED – ダーティ リード。
- READ_COMMITTED – デフォルト、ダーティ リードを防止します。
- REPEATABLE_READ – 反復不可能な読み取りを防止します。
- シリアル化可能 – 厳密に分離し、ファントム読み取りを回避します。
43) 分散 (XA) トランザクション。
javax.sql.XADataSourceを使用します JTA マネージャー(Amitikos、Bitronix、Spring)- 2 フェーズ コミットは、複数の DB にわたるコミットを調整します。
44) JDBC パフォーマンスのプロファイリング。
- P6Spy、クエリログ用のデータソースプロキシ
- 接続使用のための Java Flight Recorder / JVisualVM。
- データベース EXPLAIN はクエリ調整を計画しています。
- 指標には Prometheus + Grafana。
45) JDBC メモリ リークの防止。
ResultSetを常に閉じてください 、Statement、ConnectionTry‑with‑リソース経由。- プールのタイムアウト (maxIdleTime、maxLifetime) を構成します。
- スコープを超えて ResultSet を保持しないようにします。
46) マイクロサービス/クラウド用の JDBC。
- 軽量プーリング用の HikariCP
- ステートレス JDBC セッション。
- リードレプリカ、キャッシュ (Redis)。
- DB フェイルオーバー用の Resilience4j サーキット ブレーカー
47) 接続障害の適切な処理。
for(int i=0;i<3;i++){
try(Connection c=ds.getConnection()){ break; }
catch(SQLTransientConnectionException e){ Thread.sleep(1000*(i+1)); }
} 48) コミット、ロールバック、セーブポイントの違い。
- コミット – すべての変更を完了します。
- ロールバック – 最後のコミットに戻ります。
- セーブポイント – 部分的なロールバック ターゲット。
49) JDBC メタデータの有用性。
- 動的スキーマのイントロスペクション。
- データベースの機能チェック。
- ORM 生成用のツール
50) エンタープライズ JDBC のベスト プラクティス。
<オル>DataSource を使用します プーリングを使用します。PreparedStatement を優先します .🔍 JDBC 面接でよくある質問と現実世界のシナリオと戦略的な回答
以下は、面接官が期待する内容と強力な回答例を含む、慎重に作成された JDBC 面接の質問 10 個です。
1) JDBC とは何ですか?なぜ重要ですか?
期待される答え: JDBC はデータベース アクセス用の Java API です。 SQL の実行、結果処理、トランザクションを抽象化し、データベースに依存しないコードを可能にします。
2) JDBC ドライバーの種類について説明します。
期待される答え: 4 種類:JDBC‑ODBC ブリッジ、ネイティブ API、ネットワーク プロトコル、シン ドライバー。現在では Type4 が最も一般的です。
3) 接続を効率的に管理するにはどうすればよいですか?
期待される答え: HikariCP などの接続プールを使用します。リクエストごとに接続を開いたり閉じたりすることは避けてください。
4) Statement、PreparedStatement、CallableStatement を区別します。
期待される答え: ステートメント - 静的 SQL。 PreparedStatement – パラメータ化されており、インジェクションを防止します。 CallableStatement – ストアド プロシージャ。
5) 実行した JDBC パフォーマンスの最適化について説明します。
期待される答え: 文字列連結を PreparedStatement に置き換え、プーリングを導入し、バッチ挿入を使用しました。応答時間が 40% 短縮されました。
6) SQL インジェクションを防ぐにはどうすればよいですか?
期待される答え: PreparedStatement を使用します。入力を検証します。 DB 権限を制限します。
7) JDBC 接続エラーのトラブルシューティングを行います。
期待される答え: URL、認証情報、ネットワーク、ドライバー jar を確認します。ログを確認する。誤って設定されたポートを修正してください。
8) JDBC でトランザクションを管理します。
期待される答え: 自動コミットを無効にし、操作を実行し、結果に基づいてコミットまたはロールバックします。 ACID 準拠を保証します。
9) JDBC を使用して DB の困難な問題を解決します。
期待される答え: 一括挿入のバッチ処理を実装し、時間を数分から数秒に短縮しました。
10) 厳しい期限内で JDBC の機能強化を優先します。
期待される答え: 影響を評価し、明確にコミュニケーションし、影響の大きい項目に最初に取り組み、SLA を満たすために協力します。
Java