JDBC(ジェイディービーシー)とは | 意味や読み方など丁寧でわかりやすい用語解説

JDBC(ジェイディービーシー)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

ジェイディービーシー (ジェイディービーシー)

英語表記

JDBC (ジェイディービーシー)

用語解説

JDBCは、Java Database Connectivityの略称であり、Javaプログラムからリレーショナルデータベースに接続し、データの操作を行うための標準的なAPI(Application Programming Interface)である。APIとは、ソフトウェアコンポーネント同士が互いに情報をやり取りする際に使用される一連の規約やインターフェースの集合体を指す。つまりJDBCは、Javaというプログラミング言語と、Oracle Database, MySQL, PostgreSQLといった様々なデータベース製品との間の「共通の対話方法」を定めた規格である。この規格が存在するおかげで、プログラマはデータベース製品ごとに異なる接続方法やデータ操作のコードを学習・実装する必要がなくなる。特定のデータベースに依存しない、移植性の高いデータベースアプリケーションを開発することが可能になる点が、JDBCの最も重要な役割である。

JDBCの仕組みを理解する上で欠かせないのが「JDBCドライバ」の存在だ。JDBC自体はあくまで仕様、つまりインターフェースの集まりであり、それだけではデータベースと直接通信することはできない。実際にデータベースとの通信を担うのが、各データベースベンダーによって提供されるJDBCドライバというソフトウェアである。JDBCドライバは、JDBCという標準的なAPIの呼び出しを、それぞれのデータベースが理解できる固有のプロトコルや命令形式に変換する「通訳」のような役割を果たす。これにより、Javaアプリケーション開発者は、JDBCの作法に則ってコードを書くだけで、その背後でJDBCドライバがデータベースとの複雑な通信をすべて引き受けてくれる。例えば、アプリケーションがMySQLからOracle Databaseに接続先を変更する場合でも、プログラムの大部分を書き換える必要はなく、使用するJDBCドライバをOracle用のものに差し替え、接続情報の一部を修正するだけで対応できる。

JDBCを利用したプログラミングは、いくつかの主要なインターフェースとクラスを介して行われる。まず、データベースへの接続を確立するためにDriverManagerクラスが用いられる。このクラスのgetConnectionメソッドに、データベースの場所を示すURL、ユーザー名、パスワードといった接続情報を渡すことで、データベースとのセッションを表すConnectionオブジェクトを取得する。このConnectionオブジェクトは、データベース接続の基点となり、トランザクション管理やSQL文を実行するためのオブジェクトを生成する役割を持つ。

SQL文を実行するためには、ConnectionオブジェクトからStatementまたはPreparedStatementインターフェースの実装オブジェクトを生成する。Statementは静的なSQL文をそのまま実行する際に使用される。一方、PreparedStatementは、SQL文の雛形をあらかじめデータベースに送ってコンパイルしておく方式で、パラメータ部分を後から設定できる特徴を持つ。これにより、同じ構造のSQL文を繰り返し実行する際のパフォーマンスが向上するほか、外部からの入力値を安全にSQL文に埋め込むことができるため、SQLインジェクションと呼ばれるセキュリティ上の脆弱性を防ぐ上で極めて重要となる。そのため、特別な理由がない限りはPreparedStatementの使用が強く推奨される。

SQL文の実行は、executeQueryメソッドとexecuteUpdateメソッドを使い分ける。executeQueryは、SELECT文のように結果セットを返す問い合わせに使用され、戻り値としてResultSetオブジェクトを返す。executeUpdateは、INSERT, UPDATE, DELETE文のようにデータベースの更新を行い、結果セットを返さない処理に使用され、戻り値として更新された行数を返す。

executeQueryによって得られたResultSetオブジェクトは、問い合わせ結果のデータセットを保持している。このオブジェクトが持つカーソルをnextメソッドで一行ずつ進めながら、getStringgetIntといったgetXXX系のメソッドを使って各列のデータをJavaのデータ型として取り出すことができる。

データベースの利用が終わった後は、リソースを確実に解放することが非常に重要である。使用したResultSetStatement(またはPreparedStatement)、Connectionの各オブジェクトは、生成したのと逆の順序でcloseメソッドを呼び出して閉じる必要がある。これを怠ると、データベースサーバとの接続が解放されずに残り続け、システムのパフォーマンス低下やリソース枯渇の原因となる。Java 7以降で導入されたtry-with-resources構文を使用すると、このリソース解放処理を自動的かつ安全に行うことができるため、積極的に活用することが望ましい。

このように、JDBCはJavaアプリケーションにおけるデータベースアクセスの基盤技術として、標準化された一貫性のある方法を提供している。これにより、開発者はデータベース製品の差異を意識することなく、本質的なビジネスロジックの実装に集中することができるのである。

JDBC(ジェイディービーシー)とは | 意味や読み方など丁寧でわかりやすい用語解説 | いっしー@Webエンジニア