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 では、プールは安全なタイプであり、IN と OUT の引数の組み合わせを処理できます。アプリケーションで 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 の制限によってバインドされません。タイプ名のテキスト定数の代わりに、データベース固有の型を使用できるようになりました。