Java >> Java チュートリアル >  >> Tag >> Jdbc

JDBC チュートリアル – JDBC アーキテクチャ、コンポーネント、および作業

この JDBC チュートリアルでは、JDBC API (SQL CREATE、INSERT、UPDATE、DELETE、および SELECT) を使用して Java でデータベース操作を実行する方法について学習します。

JDBCを使用してJavaをデータベースに接続するプロセスを見ていきます。データベースで操作を実行する各例を実装します。

この JDBC チュートリアルでは、Java での JDBC の構成とアーキテクチャについても説明します。また、JDBC API で使用されるすべてのクラスとインターフェースも表示されます。それでは、JDBC チュートリアルを始めましょう。

TechVidvan on Telegram に参加して、最新のテクノロジー トレンドを最新の状態に保ちましょう

JDBC とは?

JDBC という用語は、Java Database Connectivity を表します。 JDBC は Sun microsystems の仕様です。 JDBC は Java の API (アプリケーション プログラミング インターフェース) であり、ユーザーがさまざまなデータベースとやり取りしたり通信したりするのに役立ちます。

JDBC API のクラスとインターフェースにより、アプリケーションは指定されたデータベースにリクエストを送信できます。

JDBC を使用すると、データベースにアクセスするために必要なプログラムを作成できます。 JDBC とデータベース ドライバは、データベースとスプレッドシートにアクセスできます。 JDBC API は、リレーショナル データベース (RDB) に保存されているエンタープライズ データへのアクセスにも役立ちます。

JDBC の目的

JAVA EE(Enterprise Edition) テクノロジを使用して作成されたエンタープライズ アプリケーションがいくつかあります。これらのアプリケーションは、アプリケーション固有の情報を保存するためにデータベースとやり取りする必要があります。

データベースと対話するには、効率的なデータベース接続が必要です。これは、ODBC (オープン データベース接続) ドライバーを使用して実現できます。この ODBC ドライバーを JDBC で使用して、Oracle、MS Access、Mysql、SQL などのさまざまな種類のデータベースと対話または通信できます。

JDBC のアプリケーション

JDBC は基本的に、インターフェースの完全なセットを提供する仕様です。これらのインターフェースにより、基礎となるデータベースへのポータブル アクセスが可能になります。

Java を使用して、次のようなさまざまな種類の実行可能ファイルを作成できます。

  • Java アプリケーション
  • Java アプレット
  • エンタープライズ JavaBean (EJB)
  • Java サーブレット
  • Java ServerPages (JSP)

これらのさまざまな実行可能ファイルはすべて、JDBC ドライバーを使用してデータベースにアクセスし、保存されているデータを活用できます。 JDBC は、Java プログラムがデータベースに依存しないコードを含むことを可能にすることで、ODBC と同様の機能を提供します。

JDBC 4.0 パッケージ

JDBC 4.0 には、java.sql と javax.sql の 2 つの主要なパッケージがあります。 JDBC 4.0 は、この記事の執筆時点での最新の JDBC バージョンです。これらのパッケージは、データ ソースと対話するための主要なクラスを提供します。

これらのパッケージの新機能には、次の領域の変更が含まれます:

  • データベース ドライバの自動読み込み
  • 例外処理の改善
  • 各国の文字セットのサポート
  • SQL ROWID アクセス。
  • 強化された BLOB/CLOB 機能。
  • 接続とステートメント インターフェイスの機能強化
  • SQL 2003 XML データ型のサポート
  • 注釈。

JDBC のコンポーネント

JDBC チュートリアルをさらに進めて、JDBC コンポーネントについて学びましょう。 JDBC には主に 4 つの主要コンポーネントがあります。これらのコンポーネントは、データベースと対話するのに役立ちます。 JDBC のコンポーネントは次のとおりです。

<強い>1. JDBC API: JDBC API は、データベースとの簡単な通信に役立つさまざまなクラス、メソッド、およびインターフェースを提供します。また、Java SE (Standard Edition) および Java EE (Enterprise Edition) プラットフォームを含む 2 つのパッケージを提供し、WORA (write once run Everywhere) 機能を発揮します。

JDBC API には、データベースをクライアント アプリケーションに接続するための標準もあります。

<強い>2. JDBC ドライバー マネージャー: JDBC のドライバー マネージャーは、データベース固有のドライバーをアプリケーションに読み込みます。このドライバ マネージャは、データベースとの接続を確立します。また、ユーザー リクエストを処理できるように、データベースにデータベース固有の呼び出しを行います。

<強い>3. JDBC テスト スイート: JDBC のテスト スイートは、JDBC ドライバーが実行する挿入、削除、更新などの操作をテストするのに役立ちます。

<強い>4. JDBC-ODBC ブリッジ ドライバ: JDBC-ODBC ブリッジ ドライバーは、データベース ドライバーをデータベースに接続します。このブリッジ ドライバは、JDBC メソッド呼び出しを ODBC メソッド呼び出しに変換します。 ODBC 特性にアクセスするためのネイティブ ライブラリがあるパッケージを使用します。

JDBC のアーキテクチャ

次の図は、JDBC アーキテクチャを示しています。

アーキテクチャの説明:

<強い>1.アプリケーション: JDBC のアプリケーションは、データ ソースと通信する Java アプレットまたはサーブレットです。

<強い>2. JDBC API: JDBC API は、Java プログラムが SQL ステートメントを実行し、データベースから結果を取得できるようにするクラス、メソッド、およびインターフェースを提供します。 JDBC API で定義されているいくつかの重要なクラスとインターフェースは次のとおりです:

  • ドライバーマネージャー
  • ドライバー
  • つながり
  • 声明
  • PreparedStatement
  • CallableStatement
  • 結果セット
  • SQL データ

<強い>3.ドライバー マネージャー: Driver Manager は、JDBC アーキテクチャで重要な役割を果たします。ドライバー マネージャーは、エンタープライズ アプリケーションをデータベースに効果的に接続する、いくつかのデータベース固有のドライバーを使用します。

<強い>4. JDBC ドライバー: JDBC ドライバーは、JDBC を介してデータ ソースと通信するのに役立ちます。それぞれのデータ ソースとインテリジェントにやり取りできる JDBC ドライバーが必要です。

JDBC アーキテクチャの種類

JDBC アーキテクチャには、2 層と 3 層の 2 種類の処理モデルがあります。これらのモデルは、データベースへのアクセスに役立ちます。それらは:

1. 2 層モデル

このモデルでは、Java アプリケーションがデータ ソースと直接通信します。 JDBC ドライバーは、アプリケーションとデータ ソース間の通信を提供します。ユーザーがクエリをデータ ソースに送信すると、それらのクエリに対する回答が結果の形式でユーザーに提供されます。

ユーザーが接続しているネットワーク上の別のマシンにデータ ソースを配置できます。これはクライアント/サーバー構成と呼ばれ、ユーザー マシンがクライアントとして機能し、データ ソースを持つマシンがサーバーとして機能します。

2. 3 層モデル

3 層モデルでは、ユーザー クエリのクエリは中間層のサービスに送られます。中間層サービスから、コマンドは再びデータ ソースに到達します。クエリの結果は中間層に戻されます。

そこから、最終的にユーザーに行きます。このタイプのモデルは、経営情報システム ディレクターにとって有益です。

JDBC の前提条件

  • JDK(Java 開発キット)
  • Oracle データベース: http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html からダウンロードします。
  • Oracle データベース用の JDBC ドライバ:http://www.oracle.com/technetwork/apps-tech/jdbc-112010-090769.html からダウンロードします。 . ojdbc6.jar をプロジェクト ライブラリに追加します。

Java プログラムとデータベースを接続する手順:

1.ドライバーのロード

プログラムで使用する前に、まずドライバーをロードまたは登録する必要があります。プログラムに一度登録する必要があります。 2 つの方法のいずれかでドライバーを登録できます。

a. Class.forName(): ここでは、実行時にドライバのクラス ファイルをメモリにロードします。オブジェクトの作成に new 演算子を使用する必要はありません。以下は、Class.forName() を使用して Oracle ドライバーをロードする方法を示しています。

Class.forName(“oracle.jdbc.driver.OracleDriver”);

b. DriverManager.registerDriver(): DriverManager は Java の組み込みクラスであり、静的メンバー レジスタが付属しています。コンパイル時にドライバ クラスのコンストラクタを呼び出します。次の例は、DriverManager.registerDriver() を使用して Oracle ドライバーを登録する方法を示しています。

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver())

2.接続を作成する

ドライバーをロードしたら、次のコードを使用して接続を確立する必要があります:

Connection con = DriverManager.getConnection(url, user, password)
  • user:SQL コマンド プロンプトにアクセスできるユーザー名
  • password:SQL コマンド プロンプトにアクセスできるパスワード
  • con:Connection インターフェースへの参照
  • url :Uniform Resource Locator。次のように作成できます:
  • 文字列 url =“ jdbc:oracle:thin:@localhost:1521:xe”

oracle はデータベース、thin はドライバー、@localhost はデータベースが格納されている IP アドレス、1521 はポート番号、xe はサービス プロバイダーです。 3 つのパラメーターはすべて文字列型であり、プログラマーは関数を呼び出す前にそれらを宣言する必要があります。

3.ステートメントを作成

接続を確立すると、データベースと対話できます。 JDBCStatement、CallableStatement、および PreparedStatement インターフェイスは、SQL コマンドを送信し、データベースからデータを受信できるようにするメソッドを定義します。

JDBC ステートメントの使用方法は次のとおりです。

Statement statement = con.createStatement()

ここで、con は、前のステップで使用した Connection インターフェースへの参照です。

4.クエリを実行

最も重要な部分は、クエリの実行です。ここで、Query は SQL クエリです。さて、私たちが知っているように、複数のタイプのクエリを持つことができます。それらのいくつかは次のとおりです:

  • データベース内のテーブルを更新または挿入するためのクエリ
  • データベースからデータを取得するためのクエリ

Statement インターフェースの executeQuery() メソッドは、データベースから値を取得するクエリを実行します。 executeQuery() メソッドは、テーブルのすべてのレコードを取得するために使用できる ResultSet のオブジェクトを返します。

5.接続を閉じる

これまで、指定された場所にデータを送信しました。これで、タスクを完了しようとしています。接続を閉じる必要があります。接続を閉じることにより、Statement および ResultSet インターフェイスのオブジェクトは自動的に閉じられます。 Connection インターフェイスの close() メソッドは、接続を閉じます。

例:

con.close();

実装

package com.techvidvan.jdbctutorial;
import java.sql. * ;
import java.util. * ;
class JDBCTutorial {
  public static void main(String a[]) {
    //Creating the connection 
    String url = "jdbc:oracle:thin:@localhost:1521:xe";
    String user = "system";
    String pass = "12345";

    //Entering the data 
    Scanner sc = new Scanner(System. in );
    System.out.println("Enter name:");
    String name = sc.next();
    System.out.println("Enter Roll number:");
    int rollNumber = sc.nextInt();
    System.out.println("Enter class:");
    String cls = sc.next();

    //Inserting data using SQL query 
    String sql = "insert into student values('" + name + "'," + rollNumber + ",'" + cls + "')";
    Connection con = null;
    try {
      DriverManager.registerDriver(new oracle.jdbc.OracleDriver());

      //Reference to connection interface 
      con = DriverManager.getConnection(url, user, pass);

      Statement st = con.createStatement();
      int result = st.executeUpdate(sql);
      if (result == 1) System.out.println("Inserted successfully: " + sql);
      else System.out.println("Insertion failed");
      con.close();
    }
    catch(Exception e) {
      System.err.println(e);
    }
  }
}

出力:

名前を入力してください:
Shreya
ロール番号を入力してください:
123
クラスを入力してください:
8C
正常に挿入されました:生徒の値に挿入します('Shreya', ' 123'、'8C')

JDBC の働き

さて、この JDBC チュートリアルを進めて、JDBC の働きを学びましょう。データベースと通信する Java アプリケーションには、JDBC API を使用したプログラミングが必要です。

JDBC をサポートするために、Java アプリケーションに Oracle や SQL サーバーなどの JDBC ドライバーのサポート データ ソースを追加する必要があります。これは実行時に動的に行うことができます。この JDBC ドライバーは、それぞれのデータ ソースとインテリジェントに対話します。

単純な JDBC アプリケーションの作成

package com.techvidvan.jdbctutorial;
import java.sql. * ;
public class JDBCTutorial {
  public static void main(String args[]) throws ClassNotFoundException,
  SQLException,
  {
    String driverName = "sun.jdbc.odbc.JdbcOdbcDriver";
    String url = "jdbc:odbc:XE";
    String username = "John";
    String password = "john12";
    String query1 = "insert into students values(101, 'Pooja')";

    //Load the driver class 
    Class.forName(driverName);

    //Obtaining a connection 
    Connection con = DriverManager.getConnection(url, username, password);

    //Obtaining a statement 
    Statement stmt = con.createStatement();

    //Executing the query 
    int count = stmt.executeUpdate(query1);
    System.out.println("The number of rows affected by this query= " + count);

    //Closing the connection 
    con.close();
  }
}

上記の例は、JDBC を使用してデータベースにアクセスするための基本的な手順を示しています。 JDBC-ODBC ブリッジ ドライバーを使用してデータベースに接続しました。基本的な SQL 機能を提供する java.sql パッケージをインポートする必要があります。

主な JDBC インターフェイスとクラス

JDBC の主要なインターフェースとクラスの概要を見てみましょう。それらはすべて java.sql パッケージに含まれています。

1. Class.forName()

このメソッドは、実行時にドライバのクラス ファイルをメモリにロードします。オブジェクトの新規または作成を使用する必要はありません。

Class.forName("oracle.jdbc.driver.OracleDriver");

2.ドライバーマネージャー

DriverManager クラスは、特定のデータベース タイプのドライバーを登録します。たとえば、このチュートリアルの Oracle データベースです。このクラスは、getConnection() メソッドを使用して、サーバーとのデータベース接続も確立します。

3.接続

Connection インターフェイスは、確立されたデータベース接続を表します。この接続を使用して、クエリを実行し、結果を取得するステートメントを作成できます。データベースに関するメタデータを取得したり、接続を閉じたりすることもできます。

Connection con = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl", "login1", "pwd1");

4.ステートメントと PreparedStatement

Statement および PreparedStatement インターフェイスは、静的 SQL クエリとパラメーター化された SQL クエリを実行します。ステートメント インターフェイスは、PreparedStatement インターフェイスのスーパー インターフェイスです。これらのインターフェースで一般的に使用されるメソッドは次のとおりです:

a. boolean execute(String sql): このメソッドは、一般的な SQL ステートメントを実行します。クエリが ResultSet を返す場合は true を返し、クエリが何も返さない場合は false を返します。このメソッドは Statement でのみ使用できます。

b. int executeUpdate(文字列 sql): このメソッドは、INSERT、UPDATE、または DELETE ステートメントを実行します。次に、影響を受けた行の数を示す更新されたアカウントを返します。たとえば、1 行が挿入された、2 行が更新された、影響を受けた行が 0 行など。

c. ResultSet executeQuery(文字列 sql): このメソッドは SELECT ステートメントを実行し、ResultSet のオブジェクトを返します。この返されたオブジェクトには、クエリによって返された結果が含まれています。

5.結果セット

ResultSet は、SELECT クエリによって返されるテーブル データを含むインターフェイスです。 ResultSet のオブジェクトを使用して、next() メソッドを使用して行を反復処理します。

6. SQL例外

SQLException クラスはチェック例外です。上記のすべてのメソッドがこの例外をスローできるように宣言します。上記のクラスのメソッドを呼び出すときに、この例外を明示的にキャッチするメカニズムを提供する必要があります。

JDBC での挿入ステートメントの実装

package com.techvidvan.jdbctutorial;
import java.sql. * ;
public class InsertStatementDemo {
  public static void main(String args[]) {
    String id = "id1";
    String password = "pswd1";
    String fullname = "TechVidvan";
    String email = "techvidvan.com";

    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection con = DriverManager.getConnection(" 
      jdbc:oracle:thin:@localhost:1521:orcl", "login1", "pswd1");
      Statement stmt = con.createStatement();

      // Inserting data in database 
      String s1 = "insert into userid values('" + id + "', '" + password + "', '" + fullname + "', '" + email + "')";
      int result = stmt.executeUpdate(s1);
      if (result > 0) System.out.println("Successfully Registered");
      else System.out.println("Insertion Failed");
      con.close();
    }
    catch(Exception e) {
      System.out.println(e);
    }
  }
}

出力:

正常に登録されました

JDBC での更新ステートメントの実装

package com.techvidvan.jdbctutorial;
import java.sql. * ;
public class UpdateStatementDemo {
  public static void main(String args[]) {
    String id = "id1";
    String password = "pswd1";
    String newPassword = "newpswd";
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection con = DriverManager.getConnection(" 
      jdbc:oracle:thin:@localhost:1521:orcl", "login1", "pswd1");
      Statement stmt = con.createStatement();

      // Updating database 
      String s1 = "UPDATE userid set password = '" + newPassword + "' WHERE id = '" + id + "' AND password = '" + password + "'";
      int result = stmt.executeUpdate(s1);

      if (result > 0) System.out.println("Password Updated Successfully ");
      else System.out.println("Error Occured!!Could not update");
      con.close();
    }
    catch(Exception e) {
      System.out.println(e);
    }
  }
}

出力:

パスワードが正常に更新されました

JDBC での削除ステートメントの実装

package com.techvidvan.jdbctutorial;
import java.sql. * ;
public class DeleteStatementDemo {
  public static void main(String args[]) {
    String id = "id2";
    String password = "pswd";
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection con = DriverManager.getConnection(" 
      jdbc:oracle:thin:@localhost:1521:orcl", "login1", "pswd1");
      Statement stmt = con.createStatement();

      //Deleting from database 
      String s1 = "DELETE from userid WHERE id = '" + id + "' AND password = '" + pswd + "'";

      int result = stmt.executeUpdate(s1);

      if (result > 0) System.out.println("One User Successfully Deleted");
      else System.out.println("Error Occured!!Could not delete");

      con.close();
    }
    catch(Exception e) {
      System.out.println(e);
    }
  }
}

出力:

1 人のユーザーが正常に削除されました

JDBC での Select ステートメントの実装

package com.techvidvan.jdbctutorial;
import java.sql. * ;
public class SelectStatementDemo {
  public static void main(String args[]) {
    String id = "id1";
    String password = "pwd1";
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection con = DriverManager.getConnection(" 
      jdbc:oracle:thin:@localhost:1521:orcl", "login1", "pwd1");
      Statement stmt = con.createStatement();

      //SELECT query 
      String s1 = "select * from userid WHERE id = '" + id + "' AND pwd = '" + pwd + "'";
      ResultSet rs = stmt.executeQuery(s1);
      if (rs.next()) {
        System.out.println("User-id: " + rs.getString(1));
        System.out.println("Full Name: " + rs.getString(3));
        System.out.println("E-mail: " + rs.getString(4));
      }
      else {
        System.out.println("This id is already registered");
      }
      con.close();
    }
    catch(Exception e) {
      System.out.println(e);
    }
  }
}

出力:

ユーザー ID:id1
フルネーム:TechVidvan
電子メール:techvidvan.com

結論

この JDBC チュートリアルでは、Java でさまざまなデータベース操作を実行する方法を学びました。また、データベースに接続するためのさまざまなプログラムと手順についても説明しました。

次に、サンプル プログラムを使用して、INSERT ステートメント、SELECT ステートメント、UPDATE ステートメント、および DELETE ステートメントを実行する方法を学びました。 JDBC のアーキテクチャとコンポーネントについて説明しました。

この記事が Java でのデータベース操作の実行に役立つことを願っています。


Java タグ