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 ステートメントを実行します。
-
Class.forName()を使用して Tablestore JDBC ドライバーをロードします。ドライバークラス名は
com.alicloud.openservices.tablestore.jdbc.OTSDriverです。Class.forName("com.alicloud.openservices.tablestore.jdbc.OTSDriver"); -
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&...¶mN=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); -
-
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 |
リトライポリシー。有効値:
|
|
retryTimeout |
10 |
リトライのタイムアウト値と時間単位。有効な時間単位:
|
|
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 の型 |
変換ルール |
|
整数 |
|
|
Double |
|
|
文字列 |
|
|
バイナリ |
|
|
ブール値 |
|
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 |
✓ |
✓ |
✓ |
✓ |
✓ |