8.2. Eclipse Vert.x JDBC クライアントの変更点


Eclipse Vert.x 4 以降、JDBC クライアントは SQL クライアントをサポートします。SQL 共通モジュールは、io.vertx:vertx-jdbc-client モジュールにマージされる io.vertx:vertx-sql-common という JDBC クライアントでマージされました。io.vertx:vertx-jdbc-client にはそれが含まれるため、io.vertx:vertx-sql-common 依存関係ファイルを削除する必要があります。SQL 共通クライアントのマージにより、すべてのデータベース API が JDBC クライアントに統合されました。

Eclipse Vert.x 4 では、SQL クライアントが更新され、以下のクライアントが含まれるようになりました。

  • リアクティブ PostgreSQL クライアント。以前のリリースでは、リアクティブ PostgreSQL クライアントが含まれていました。
  • リアクティブ MySQL クライアント
  • リアクティブ DB2 クライアント
  • リアクティブ PostgreSQL クライアントを引き続き組み込みます。このクライアントは Eclipse Vert.x 3.x リリースでも利用できていました。
  • 既存の JDBC クライアントに JDBC クライアント API と SQL クライアント API の両方が含まれるようになりました。

リアクティブ実装では、データベースネットワークプロトコルを使用します。これにより、リソース効率が向上します。

データベースへの JDBC 呼び出しはブロック呼び出しです。JDBC クライアントはワーカースレッドを使用してこれらの呼び出しをブロックしません。

以下のセクションでは、Eclipse Vert.x JDBC クライアントの変更点を説明します。

8.2.1. プールの作成

Eclipse Vert.x 4 では、JDBC クライアント API を使用してプールを作成できます。以前のリリースでは、クライアントのみを作成できました。プールを作成できませんでした。

以下の例は、Eclipse Vert.x 3.x でクライアントを作成する方法を示しています。

// 3.x
SQLClient client = JDBCClient.create(vertx, jsonConfig);

以下の例は、Eclipse Vert.x 4 でプールを作成する方法を示しています。

// 4.x
JDBCPool pool = JDBCPool.pool(vertx, jsonConfig);
注記

Eclipse Vert.x 3.x API は Eclipse Vert.x 4 でサポートされていますが、アプリケーションで新しい JDBC クライアント API を使用することが推奨されます。

プールを使用すると、単純なクエリーを実行できます。単純なクエリーの接続を管理する必要はありません。ただし、複雑なクエリーや複数のクエリーの場合は、接続を管理する必要があります。

以下の例は、Eclipse Vert.x 3.x でクエリーの接続を管理する方法を示しています。

// 3.x
client.getConnection(res -> {
  if (res.succeeded()) {
    SQLConnection connection = res.result();
    // Important, do not forget to return the connection
    connection.close();
  } else {
    // Failed to get connection
  }
});

以下の例は、Eclipse Vert.x 4 でクエリーの接続を管理する方法を示しています。

// 4.x
pool
  .getConnection()
  .onFailure(e -> {
    // Failed to get a connection
  })
  .onSuccess(conn -> {
    // Important, do not forget to return the connection
    conn.close();
  });

8.2.2. Typsesafe 設定のサポート

設定には jsonConfig を使用できます。ただし、jsonConfig を使用するとエラーが発生する可能性があります。これらのエラーを回避するために、JDBC クライアントでは Typesafe Config が導入されました。

以下の例は、Typesafe Config の基本的な構造を示しています。

// 4.x ONLY!!!
JDBCPool pool = JDBCPool.pool(
      vertx,
      // configure the connection
      new JDBCConnectOptions()
        // H2 connection string
        .setJdbcUrl("jdbc:h2:~/test")
        // username
        .setUser("sa")
        // password
        .setPassword(""),
      // configure the pool
      new PoolOptions()
        .setMaxSize(16)
    );
注記

Typesafe Config を使用するには、プロジェクトに agroal 接続プールを含める必要があります。プールは多くの設定オプションを公開しないため、設定を簡単に使用できるようになります。

8.2.3. SQL クエリーの実行

ここでは、JDBC クライアントでクエリーを実行する方法を説明します。

8.2.3.1. 単発のクエリーの実行

以下の例は、Eclipse Vert.x 3.x で接続を管理せずにクエリーを実行する方法を示しています。

// 3.x
client.query("SELECT * FROM user WHERE emp_id > ?", new JsonArray().add(1000), res -> {
  if (res.succeeded()) {
    ResultSet rs = res2.result();
    // You can use these results in your application
  }
});

以下の例は、Eclipse Vert.x 4 で接続を管理せずにクエリーを実行する方法を示しています。

// 4.x
pool
  .preparedQuery("SELECT * FROM user WHERE emp_id > ?")
  // the emp id to look up
  .execute(Tuple.of(1000))
  .onSuccess(rows -> {
    for (Row row : rows) {
      System.out.println(row.getString("FIRST_NAME"));
    }
  });

8.2.3.2. 管理接続でのクエリーの実行

以下の例は、Eclipse Vert.x 4 で管理された接続でクエリーを実行する方法を示しています。

pool
  .getConnection()
  .onFailure(e -> {
    // Failed to get a connection
  })
  .onSuccess(conn -> {
    conn
      .query("SELECT * FROM user")
      .execute()
      .onFailure(e -> {
        // Handle the failure
        // Important, do not forget to return the connection
        conn.close();
      })
      .onSuccess(rows -> {
        for (Row row : rows) {
          System.out.println(row.getString("FIRST_NAME"));
        }
        // Important, do not forget to return the connection
        conn.close();
      });
  });

8.2.4. ストアドプロシージャーのサポート

ストアドプロシージャーは JDBC クライアントでサポートされます。

以下の例は、Eclipse Vert.x 3.x で IN 引数を渡す方法を示しています。

// 3.x
connection.callWithParams(
  "{ call new_customer(?, ?) }",
  new JsonArray().add("John").add("Doe"),
  null,
  res -> {
    if (res.succeeded()) {
      // Success!
    } else {
      // Failed!
    }
  });

以下の例は、Eclipse Vert.x 4 で IN 引数を渡す方法を示しています。

// 4.x
client
  .preparedQuery("{call new_customer(?, ?)}")
  .execute(Tuple.of("Paulo", "Lopes"))
  .onSuccess(rows -> {
    ...
  });

Eclipse Vert.x 3.x では、IN 引数および OUT 引数を組み合わせるサポートは、利用可能なタイプにより大幅に制限されていました。Eclipse Vert.x 4 では、プールは安全なタイプであり、INOUT の引数の組み合わせを処理できます。アプリケーションで INOUT パラメーターを使用することもできます。

以下の例は、Eclipse Vert.x 3.x での引数の処理を示しています。

// 3.x
connection.callWithParams(
  "{ call customer_lastname(?, ?) }",
  new JsonArray().add("John"),
  new JsonArray().addNull().add("VARCHAR"),
  res -> {
    if (res.succeeded()) {
      ResultSet result = res.result();
    } else {
      // Failed!
    }
});

以下の例は、Eclipse Vert.x 4 での引数の処理を示しています。

// 4.x
client
  .preparedQuery("{call customer_lastname(?, ?)}")
  .execute(Tuple.of("John", SqlOutParam.OUT(JDBCType.VARCHAR)))
  .onSuccess(rows -> {
    ...
  });

JDBC クライアントで、データ型が更新されました。

  • OUT 型の引数に、戻り値のタイプを指定できます。この例では、OUT 引数は、JDBC 定数である VARCHAR 型として指定されています。
  • タイプは JSON の制限によってバインドされません。タイプ名のテキスト定数の代わりに、データベース固有の型を使用できるようになりました。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る