すべてのプロダクト
Search
ドキュメントセンター

Tablestore:JDBC 直接接続による SQL クエリの使用

最終更新日:Jun 10, 2026

Tablestore インスタンスに直接接続し、com.aliyun.openservices:tablestore-jdbc ドライバーを使用して標準の JDBC インターフェース経由で SQL クエリを実行します。

前提条件

  • AccessKey ペア (RAM ユーザーには "Action": "ots:SQL*" 権限が必要です)

  • データテーブルとそのマッピングテーブル (DDL 操作)

ステップ 1: JDBC ドライバーのインストール

ドライバーは、Maven 依存関係またはスタンドアロンの JAR として利用できます。

Maven 依存関係

Maven の pom.xml の <dependencies> セクションに Tablestore JDBC ドライバーの依存関係を追加します。次の例ではバージョン 5.17.0 を使用します。

<dependency>
  <groupId>com.aliyun.openservices</groupId>
  <artifactId>tablestore-jdbc</artifactId>
  <version>5.17.0</version>
</dependency>

手動インストール

Tablestore JDBC ドライバーをダウンロードし、プロジェクトにインポートします。

ステップ 2: JDBC 直接接続の使用

ドライバーをロードし、インスタンスに接続してから、SQL ステートメントを実行します。

  1. Class.forName() を使用して Tablestore JDBC ドライバーをロードします。

    ドライバーのクラス名は com.alicloud.openservices.tablestore.jdbc.OTSDriver です。

    Class.forName("com.alicloud.openservices.tablestore.jdbc.OTSDriver");
  2. JDBC を使用して Tablestore インスタンスに接続します。

    String url = "jdbc:ots:https://myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance";
    String user = "************************";
    String password = "********************************";
    Connection conn = DriverManager.getConnection(url, user, password);

    接続パラメーターについては、次の表で説明します。

    パラメーター

    説明

    url

    Tablestore JDBC の URL です。形式: jdbc:ots:schema://[accessKeyId:accessKeySecret@]endpoint/instanceName[?param1=value1&...&paramN=valueN]。URL の各フィールドは次のとおりです。

    • schema (必須):プロトコルです。https に設定します。

    • accessKeyId:accessKeySecret (オプション):Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey Secret。

    • endpoint (必須):インスタンスのエンドポイント。

    • instanceName (必須):インスタンスの名前。

    その他の設定項目については、「設定」をご参照ください。

    user

    Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。

    password

    Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret。

    URL または Properties オブジェクトを介して AccessKey ペアと設定を渡します。次の例では、インターネット経由で China (Hangzhou) リージョンの myinstance インスタンスに接続します。

    URL

    DriverManager.getConnection("jdbc:ots:https://************************:********************************@myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance?enableRequestCompression=true");

    Properties

    Properties info = new Properties();
    info.setProperty("user", "************************");
    info.setProperty("password", "********************************");
    info.setProperty("enableRequestCompression", "true");
    DriverManager.getConnection("jdbc:ots:https://myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance", info);
  3. SQL ステートメントを実行します。

    createStatement または prepareStatement を使用してクエリを実行します。

    createStatement

    String sql = "SELECT pk1, col_a FROM test_table";
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
    while (rs.next()) {
        System.out.println(rs.getString("pk1") + ", " + rs.getLong("col_a"));
    }
    rs.close();
    stmt.close();

    prepareStatement

    String sql = "SELECT * FROM test_table WHERE pk = ?";
    PreparedStatement stmt = conn.prepareStatement(sql);
    stmt.setLong(1, 1);
    ResultSet rs = stmt.executeQuery();
    ResultSetMetaData meta = rs.getMetaData();
    while (rs.next()) {
        for (int i = 1; i <= meta.getColumnCount(); i++) {
            System.out.println(meta.getColumnName(i) + " = " + rs.getString(i));
        }
    }
    rs.close();
    stmt.close();

完全な例

次の例では、Tablestore インスタンスの test_table からデータを照会します。

public class Demo {
    public static void main(String[] args) throws Exception {
        Class.forName("com.alicloud.openservices.tablestore.jdbc.OTSDriver");

        String url = "jdbc:ots:https://myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance";
        String user = "************************";
        String password = "********************************";
        Connection conn = DriverManager.getConnection(url, user, password);

        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM test_table");
        ResultSetMetaData meta = rs.getMetaData();
        int colCount = meta.getColumnCount();
        while (rs.next()) {
            for (int i = 1; i <= colCount; i++) {
                System.out.print(meta.getColumnName(i) + "=" + rs.getString(i) + "\t");
            }
            System.out.println();
        }

        rs.close();
        stmt.close();
        conn.close();
    }
}

設定

Tablestore JDBC ドライバーは Java SDK に基づいて構築されており、URL パラメーターまたは Properties を使用して設定できます。

重要

SQL リクエストのサーバー側タイムアウトは 30 秒です。より短いタイムアウトを設定するには、syncClientWaitFutureTimeoutInMillis を 30000 未満の値に設定するか、各ステートメントで setQueryTimeout を呼び出してください。

パラメーター

デフォルト

説明

enableRequestCompression

false

リクエストデータを圧縮するかどうかを指定します。

enableResponseCompression

false

レスポンスデータを圧縮するかどうかを指定します。

ioThreadCount

2

HttpAsyncClient 内の IOReactor スレッドの数です。

maxConnections

300

HTTP 接続の最大数です。

socketTimeoutInMillisecond

30000

ソケット層でのデータ転送のタイムアウト (単位:ミリ秒) です。値 0 はタイムアウトがないことを示します。

connectionTimeoutInMillisecond

30000

接続確立のタイムアウト (単位:ミリ秒) です。値 0 はタイムアウトがないことを示します。

retryThreadCount

1

リトライのスレッドプール内のスレッド数です。

syncClientWaitFutureTimeoutInMillis

-1

非同期の待機のタイムアウト (単位:ミリ秒) です。

connectionRequestTimeoutInMillisecond

60000

リクエスト送信のタイムアウト (単位:ミリ秒) です。

retryStrategy

default

リトライポリシーです。有効な値:

  • disable:リトライなし。

  • default:OTSNotEnoughCapacityUnitOTSTableNotReadyOTSPartitionUnavailableOTSServerBusyOTSQuotaExhaustedOTSTimeoutOTSInternalServerError、および OTSServerUnavailable エラー時にタイムアウトまでリトライします。

retryTimeout

10

リトライのタイムアウト値と時間単位です。有効な時間単位:

  • seconds

  • milliseconds

  • microseconds

  • nanoseconds

  • minutes

  • hours

retryTimeoutUnit

seconds

データ型変換

Tablestore は、IntegerDoubleStringBinaryBoolean の 5 つのデータ型をサポートしています。JDBC ドライバーは、Java 型と Tablestore データ型との間の変換を自動的に行います。

Java から Tablestore への変換

PreparedStatement で SQL パラメーターを設定する際、ドライバーは ByteShortIntLongBigDecimalFloatDoubleStringCharacterStreamBytes、および Boolean 型をサポートします。

PreparedStatement stmt = conn.prepareStatement("SELECT * FROM t WHERE pk = ?");
stmt.setLong(1, 1);                                // サポート対象
stmt.setURL(1, new URL("https://aliyun.com/"));    // サポート対象外 — 例外がスローされます

Tablestore から Java への変換

ResultSet から結果を読み取る際、JDBC ドライバーは次のルールに従ってデータ型を自動的に変換します。

Tablestore 型

変換ルール

Integer

  • 整数型への変換では、値が範囲外の場合、例外がスローされます。

  • 浮動小数点型への変換では、精度が失われる可能性があります。

  • 文字列型またはバイナリ型への変換は、toString() と同等です。

  • ブール値型への変換では、ゼロ以外の値の場合は true を返します。

Double

String

  • 整数型または浮動小数点型への変換では、解析に失敗した場合、例外がスローされます。

  • ブール値型への変換では、文字列が "true" の場合、true を返します。

Binary

Boolean

  • 整数型または浮動小数点型への変換では、true の場合は 1false の場合は 0 を返します。

  • 文字列型またはバイナリ型への変換は、toString() と同等です。

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT count(*) FROM t");
while (rs.next()) {
    rs.getLong(1);               // サポート対象
    rs.getCharacterStream(1);    // サポート対象外 — 例外がスローされます
}

Tablestore データ型と Java 型との間でサポートされている変換を次の表に示します。

説明

「✓」は通常の変換、「~」は例外が発生する可能性がある変換、「×」はサポート対象外の変換を示します。

Integer

Double

String

Binary

Boolean

Byte

Short

Int

Long

BigDecimal

Float

Double

String

CharacterStream

×

×

×

Bytes

Boolean