S-JIS[2023-10-07/2023-12-09] 変更履歴

Tsubakuro SQLクライアント

TsurugiTsubakuro(Java通信ライブラリー)のSqlClientのメモ。


概要

TsubakuroでSQLを実行するには、SqlClientクラスを使用する。

SqlClientはtsubakuro-sessionに含まれているので、Tsubakuroの最低限のdependenciesで使用可能。

SqlClientからTransactionPreparedStatementを生成する。
SQLはTransactionのメソッドで実行する。


SqlClientを生成する例

SqlClientインスタンスはSessionをアタッチして生成する。

import com.tsurugidb.tsubakuro.sql.SqlClient;
    try (var sqlClient = SqlClient.attach(session)) {
        〜
    }

SqlClientはクローズする必要があるが、クローズしてもアタッチされたSessionはクローズされない。


SQLを実行する例

    try (var sqlClient = SqlClient.attach(session)) {

        // トランザクション開始
        var option = TransactionOption.newBuilder().setType(TransactionType.LONG).setModifiesDefinitions(true).build();
        try (var transaction = sqlClient.createTransaction(option).await(3, TimeUnit.SECONDS)) {

            // SQL実行
            String sql = "create table test (pk int primary key, value bigint)";
            transaction.executeStatement(sql).await(3, TimeUnit.SECONDS);

            // コミット
            transaction.commit().await(3, TimeUnit.SECONDS);
        }
    }

SqlClientのメソッド

メソッド 説明
attach SessionをアタッチしてSqlClientインスタンスを生成する。 try (var sqlClient = SqlClient.attach(session)) {
}
createTransaction トランザクションを開始する。(Transactionインスタンスを生成する) try (FutureResponse<Transaction> future = sqlClient.createTransaction(transactionOption)) {
}
prepare PreparedStatementを生成する。 try (FutureResponse<PreparedStatement> future = sqlClient.prepare(sql, placeholders)) {
}
explain SQLの実行計画を取得する。 try (FutureResponse<StatementMetadata> future = sqlClient.explain(sql)) {
}
try (FutureResponse<StatementMetadata> future = sqlClient.explain(preparedStatement, parameters)) {
}
getTableMetadata テーブルの定義情報を取得する。 try (FutureResponse<TableMetadata> future = sqlClient.getTableMetadata(tableName)) {
}
listTables テーブル一覧を取得する。 try (FutureResponse<TableList> future = sqlClient.listTables()) {
}

テーブル一覧を取得する例

SqlClientでテーブルの一覧を取得することが出来る。

import com.tsurugidb.tsubakuro.sql.TableList;
    TableList tableList = sqlClient.listTables().await(3, TimeUnit.SECONDS);
    for (String tableName : tableList.getTableNames()) {
        System.out.println(tableName);
    }

なお、Tsurugi 1.0.0-BETA1では「__system_sequences」というテーブルも取得されるが、先頭が「__」のテーブルはシステムテーブルであり、そのうちlistTables()に出てこなくなる予定。


テーブルの定義情報を取得する例

SqlClientでテーブルの定義情報を取得することが出来る。
テーブルが存在しない場合はTargetNotFoundExceptionが返るので、テーブルの存在確認にも利用できる。

import com.tsurugidb.tsubakuro.sql.TableMetadata;
import com.tsurugidb.tsubakuro.sql.exception.TargetNotFoundException;
    try {
        TableMetadata metadata = sqlClient.getTableMetadata("test").await(3, TimeUnit.SECONDS);
        System.out.println(metadata);
        return true;
    } catch (TargetNotFoundException e) {
        return false;
    }

Tsubakuroへ戻る / Tsurugiへ戻る / 技術メモへ戻る
メールの送信先:ひしだま