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

Tablestore:JDBC 直接接続を使用した SQL クエリ

最終更新日:Oct 18, 2026

com.aliyun.openservices:tablestore-jdbc ドライバーを使用すると、標準の JDBC インターフェイスを介して Tablestore インスタンスに直接接続し、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: OTSNotEnoughCapacityUnit、OTSTableNotReady、OTSPartitionUnavailable、OTSServerBusy、OTSQuotaExhausted、OTSTimeout、OTSInternalServerError、OTSServerUnavailable エラーが発生した場合、タイムアウトするまでリトライします。

retryTimeout

10

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

  • seconds

  • milliseconds

  • microseconds

  • nanoseconds

  • minutes

  • hours

retryTimeoutUnit

seconds

データ型変換

Tablestore は、整数、Double、文字列、バイナリ、ブール値の 5 つのデータ型をサポートしています。JDBC ドライバーは、Java の型と Tablestore のデータ型の間で自動的に変換を行います。

Java から Tablestore へ

PreparedStatement を使用して SQL パラメーターを設定する場合、ドライバーは Byte、Short、Int、Long、BigDecimal、Float、Double、String、CharacterStream、Bytes、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 の型

変換ルール

整数

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

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

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

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

Double

文字列

  • 整数型または浮動小数点型への変換では、パースに失敗すると例外がスローされます。

  • ブール値型への変換では、文字列が、大文字と小文字を区別せずに "true" と等しい場合に true を返します。

バイナリ

ブール値

  • 整数型または浮動小数点型への変換では、true の場合は 1、false の場合は 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 の型の間でサポートされている変換を示しています。

説明

「✓」は正常な変換、「~」は例外が発生する可能性がある変換、「×」はサポートされていない変換を示します。

型

整数

Double

文字列

バイナリ

ブール値

Byte

~

~

~

~

✓

Short

~

~

~

~

✓

Int

~

~

~

~

✓

Long

✓

~

~

~

✓

BigDecimal

✓

✓

~

~

✓

Float

✓

✓

~

~

✓

Double

✓

✓

~

~

✓

String

✓

✓

✓

✓

✓

CharacterStream

×

×

✓

✓

×

Bytes

✓

✓

✓

✓

✓

Boolean

✓

✓

✓

✓

✓