TsurugiのTsubakuro(Java通信ライブラリー)のSqlClientのメモ。
|
|
TsubakuroでSQLを実行するには、SqlClientクラスを使用する。
SqlClientはtsubakuro-sessionに含まれているので、Tsubakuroの最低限のdependenciesで使用可能。
SqlClientからTransactionやPreparedStatementを生成する。
SQLはTransactionのメソッドで実行する。
SqlClientインスタンスはSessionをアタッチして生成する。
import com.tsurugidb.tsubakuro.sql.SqlClient;
try (var sqlClient = SqlClient.attach(session)) { 〜 }
SqlClientはクローズする必要があるが、クローズしてもアタッチされたSessionはクローズされない。
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); } }
メソッド | 説明 | 例 |
---|---|---|
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; }