JDBC(Java Database Connectivity)とは?意味をわかりやすく簡単に解説

text: XEXEQ編集部


JDBC(Java Database Connectivity)とは

JDBCとはJava Database Connectivityの略称で、JavaログラムからデータベースにアクセスするためのAPIです。JDBCを使用することで、JavaアプリケーションからSQLデータベースに接続し、データの読み書きを行うことができます。

JDBCは、データベースベンダーに依存しない標準的なインターフェースを提供しています。これにより、開発者はデータベースの種類を意識することなく、統一されたプログラミング方法でデータベースにアクセスできるのです。

JDBCドライバは、各データベースベンダーによって提供されています。JDBCドライバは、アプリケーションとデータベース間の通信を仲介する役割を担っています。

JDBCを使用する際は、まずJDBCドライバをロードし、データベースへの接続を確立します。その後、SQL文を実行してデータの操作を行います。最後に、データベース接続を適切に切断するのが一般的な流れとなります。

JDBCは、データベースアクセスに関する一連の処理を簡素化し、生産性の向上に貢献しています。また、JDBCはデータベース操作に関する共通のインターフェースを提供することで、アプリケーションの移植性も高めているのです。

JDBCドライバの種類と特徴

JDBCドライバの種類と特徴に関して、以下3つを簡単に解説していきます。

  • JDBC-ODBC ブリッジドライバ
  • ネイティブAPIドライバ
  • ピュアJavaドライバ

JDBC-ODBC ブリッジドライバ

JDBC-ODBC ブリッジドライバは、JDBCとODBCの間に位置するドライバです。このドライバは、ODBCドライバを介してデータベースにアクセスします。JDBC-ODBC ブリッジドライバは、Javaに標準で付属しているため、別途ドライバをインストールする必要がありません。

ただし、パフォーマンスの面では他のドライバに劣ります。また、ODBCドライバが必要となるため、プラットフォームに依存してしまうという欠点もあるのです。そのため、現在ではあまり使用されていないドライバとなっています。

ネイティブAPIドライバ

ネイティブAPIドライバは、JDBCとデータベースベンダー提供のネイティブAPIの間に位置するドライバです。このドライバは、ネイティブAPIを呼び出すことでデータベースにアクセスします。ネイティブAPIドライバは、JDBC-ODBC ブリッジドライバよりもパフォーマンスが優れています。

ただし、ネイティブAPIドライバもプラットフォームに依存してしまうという欠点があります。また、ドライバのインストールが必要となり、データベースごとに異なるドライバを用意しなければならないのです。そのため、アプリケーションの移植性が低くなってしまう可能性があります。

ピュアJavaドライバ

ピュアJavaドライバは、完全にJavaで実装されたドライバです。このドライバは、ネットワーク経由でデータベースサーバと直接通信を行います。ピュアJavaドライバは、プラットフォームに依存しないため、高い移植性を持っています。

また、ドライバのインストールも不要で、アプリケーションに同梱することができます。パフォーマンスも優れており、現在最も広く使用されているドライバとなっているのです。ただし、データベースごとに異なるドライバを使用する必要があるという点は他のドライバと同様です。

JDBCを使用したデータベース操作の基本

JDBCを使用したデータベース操作の基本に関して、以下3つを簡単に解説していきます。

  • データベース接続の確立
  • SQL文の実行
  • 結果セットの取得と処理

データベース接続の確立

JDBCを使用してデータベースを操作する際は、まずデータベースへの接続を確立する必要があります。接続を確立するには、DriverManagerクラスのgetConnection()メソッドを使用します。このメソッドには、データベースのURL、ユーザー名、パスワードを引数として渡します。

String url = "jdbc:mysql://localhost/mydatabase";
String user = "username";
String password = "password";
Connection conn = DriverManager.getConnection(url, user, password);

接続が確立されると、Connectionオブジェクトが返されます。このオブジェクトを使用して、データベースに対する様々な操作を行うことができるのです。接続が不要になった場合は、close()メソッドを呼び出して適切に切断することが大切です。

SQL文の実行

データベース接続が確立されたら、SQL文を実行してデータベースを操作します。SQL文の実行には、Statementオブジェクトを使用します。ConnectionオブジェクトのcreateStatement()メソッドを呼び出すことで、Statementオブジェクトを取得できます。

Statement stmt = conn.createStatement();
String sql = "SELECT * FROM users";
ResultSet rs = stmt.executeQuery(sql);

executeQuery()メソッドは、SELECT文の実行に使用します。INSERT、UPDATE、DELETE文の実行には、executeUpdate()メソッドを使用するのです。SQL文の実行が完了したら、close()メソッドを呼び出してStatementオブジェクトを適切に解放することが重要です。

結果セットの取得と処理

SELECT文の実行結果は、ResultSetオブジェクトとして返されます。ResultSetオブジェクトは、データベースから取得した行の集合を表します。next()メソッドを呼び出すことで、次の行に移動することができます。

while (rs.next()) {
    int id = rs.getInt("id");
    String name = rs.getString("name");
    // 取得したデータを処理する
}

各列のデータは、getXXX()メソッドを使用して取得します。XXXは、データの型に応じて適切なものを選択します。例えば、文字列型の列はgetString()、整数型の列はgetInt()を使用するといった具合です。結果セットの処理が完了したら、close()メソッドを呼び出して適切に解放することが肝要です。

JDBCのトランザクション管理

JDBCのトランザクション管理に関して、以下3つを簡単に解説していきます。

  • トランザクションの概要
  • オートコミットモードの制御
  • トランザクションの明示的な制御

トランザクションの概要

トランザクションとは、データベースに対する一連の操作をひとまとめにして扱う仕組みです。トランザクションは、ACID特性(原子性、一貫性、独立性、永続性)を満たすことが求められます。JDBCでは、トランザクション管理を行うためのメソッドが提供されています。

トランザクションを使用することで、複数の操作を論理的な単位としてまとめることができます。トランザクションが成功した場合は、全ての操作が確定され、データベースに反映されます。一方、トランザクションが失敗した場合は、全ての操作がロールバックされ、データベースは元の状態に戻るのです。

オートコミットモードの制御

JDBCでは、デフォルトでオートコミットモードが有効になっています。オートコミットモードでは、各SQL文の実行が即座にデータベースに反映されます。つまり、明示的にトランザクションを制御する必要がない場合は、オートコミットモードを使用することができるのです。

オートコミットモードを無効にするには、ConnectionオブジェクトのsetAutoCommit()メソッドを使用します。引数にfalseを指定することで、オートコミットモードが無効になります。オートコミットモードが無効の場合は、明示的にcommit()メソッドまたはrollback()メソッドを呼び出すことで、トランザクションを制御する必要があります。

conn.setAutoCommit(false);

トランザクションの明示的な制御

オートコミットモードが無効の場合は、明示的にトランザクションを制御する必要があります。トランザクションを開始するには、setAutoCommit(false)を呼び出します。その後、必要なSQL文を実行し、トランザクションを確定する場合はcommit()メソッド、ロールバックする場合はrollback()メソッドを呼び出します。

try {
    conn.setAutoCommit(false);
    // SQL文の実行
    conn.commit();
} catch (SQLException e) {
    conn.rollback();
} finally {
    conn.setAutoCommit(true);
}

トランザクション制御を行う際は、例外処理を適切に行うことが重要です。例外が発生した場合は、catch節でrollback()メソッドを呼び出してトランザクションをロールバックします。finally節では、setAutoCommit(true)を呼び出してオートコミットモードを元に戻すのが一般的です。

※上記コンテンツはAIで確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。

「プログラミング」に関するコラム一覧「プログラミング」に関するニュース一覧
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。