Hubungkan langsung ke instans Tablestore dan jalankan kueri SQL melalui antarmuka JDBC standar menggunakan driver com.aliyun.openservices:tablestore-jdbc.
Prasyarat
Pasangan Kunci Akses (Pengguna RAM memerlukan izin
"Action": "ots:SQL*")Tabel data dan tabel pemetaannya (Operasi DDL)
Langkah 1: Instal driver JDBC
Driver tersedia sebagai dependensi Maven atau file JAR mandiri.
Maven dependency
Tambahkan dependensi driver Tablestore JDBC ke bagian <dependencies> dalam file pom.xml Maven Anda. Contoh berikut menggunakan versi 5.17.0:
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>tablestore-jdbc</artifactId>
<version>5.17.0</version>
</dependency>
Instalasi manual
Unduh driver Tablestore JDBC dan impor ke dalam proyek Anda.
Langkah 2: Gunakan koneksi JDBC langsung
Muat driver, hubungkan ke instans, lalu jalankan pernyataan SQL.
-
Muat driver Tablestore JDBC dengan
Class.forName().Nama kelas driver adalah
com.alicloud.openservices.tablestore.jdbc.OTSDriver.Class.forName("com.alicloud.openservices.tablestore.jdbc.OTSDriver"); -
Hubungkan ke instans Tablestore melalui JDBC.
String url = "jdbc:ots:https://myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance"; String user = "************************"; String password = "********************************"; Connection conn = DriverManager.getConnection(url, user, password);Tabel berikut menjelaskan parameter koneksi.
Parameter
Deskripsi
url
URL JDBC Tablestore. Format:
jdbc:ots:schema://[accessKeyId:accessKeySecret@]endpoint/instanceName[?param1=value1&...¶mN=valueN]. Kolom URL terdiri dari:-
schema (wajib): Protokol. Tetapkan kolom ini ke https.
-
accessKeyId:accessKeySecret (opsional): ID AccessKey dan AccessKey Secret dari Akun Alibaba Cloud atau Pengguna RAM Anda.
-
endpoint (wajib): Titik akhir instans.
-
instanceName (wajib): Nama instans.
Untuk item konfigurasi lainnya, lihat Konfigurasi.
user
ID AccessKey dari Akun Alibaba Cloud atau Pengguna RAM Anda.
password
AccessKey Secret dari Akun Alibaba Cloud atau Pengguna RAM Anda.
Berikan pasangan AccessKey dan pengaturan Anda melalui URL atau objek Properties. Contoh berikut menghubungkan ke instans myinstance di wilayah China (Hangzhou) melalui Internet.
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); -
-
Jalankan pernyataan SQL.
Gunakan
createStatementatauprepareStatementuntuk menjalankan kueri.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();
Contoh lengkap
Contoh berikut melakukan kueri data dari test_table di instans Tablestore.
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();
}
}
Konfigurasi
Driver Tablestore JDBC dibangun di atas Java SDK dan mendukung konfigurasi melalui parameter URL atau objek Properties.
Timeout sisi server untuk permintaan SQL adalah 30 detik. Untuk menetapkan timeout yang lebih pendek, atur syncClientWaitFutureTimeoutInMillis ke nilai kurang dari 30000, atau panggil setQueryTimeout pada setiap Statement.
|
Parameter |
Bawaan |
Deskripsi |
|
enableRequestCompression |
false |
Menentukan apakah data permintaan dikompresi. |
|
enableResponseCompression |
false |
Menentukan apakah data respons dikompresi. |
|
ioThreadCount |
2 |
Jumlah thread IOReactor dalam HttpAsyncClient. |
|
maxConnections |
300 |
Jumlah maksimum koneksi HTTP. |
|
socketTimeoutInMillisecond |
30000 |
Timeout untuk transfer data di lapisan socket. Satuan: milidetik. Nilai 0 berarti tanpa timeout. |
|
connectionTimeoutInMillisecond |
30000 |
Timeout untuk membuat koneksi. Satuan: milidetik. Nilai 0 berarti tanpa timeout. |
|
retryThreadCount |
1 |
Jumlah thread dalam kolam thread retry. |
|
syncClientWaitFutureTimeoutInMillis |
-1 |
Timeout untuk penantian asinkron. Satuan: milidetik. |
|
connectionRequestTimeoutInMillisecond |
60000 |
Timeout untuk mengirim permintaan. Satuan: milidetik. |
|
retryStrategy |
default |
Kebijakan retry. Nilai yang valid:
|
|
retryTimeout |
10 |
Nilai timeout retry dan satuan waktunya. Satuan waktu yang valid:
|
|
retryTimeoutUnit |
seconds |
Konversi tipe data
Tablestore mendukung lima tipe data: Integer, Double, String, Binary, dan Boolean. Driver JDBC secara otomatis mengonversi antara tipe Java dan tipe data Tablestore.
Java ke Tablestore
Saat Anda mengatur parameter SQL dengan PreparedStatement, driver mendukung tipe Byte, Short, Int, Long, BigDecimal, Float, Double, String, CharacterStream, Bytes, dan Boolean.
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM t WHERE pk = ?");
stmt.setLong(1, 1); // Didukung
stmt.setURL(1, new URL("https://aliyun.com/")); // Tidak didukung — melemparkan exception
Tablestore ke Java
Saat Anda membaca hasil dari ResultSet, driver JDBC secara otomatis mengonversi tipe data sesuai aturan berikut.
|
Tipe Tablestore |
Aturan konversi |
|
Integer |
|
|
Double |
|
|
String |
|
|
Binary |
|
|
Boolean |
|
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT count(*) FROM t");
while (rs.next()) {
rs.getLong(1); // Didukung
rs.getCharacterStream(1); // Tidak didukung — melemparkan exception
}
Tabel berikut menunjukkan konversi antara tipe data Tablestore dan tipe Java yang didukung.
"✓" menunjukkan konversi normal, "~" menunjukkan kemungkinan exception, dan "×" menunjukkan konversi tidak didukung.
|
Tipe |
Integer |
Double |
String |
Binary |
Boolean |
|
Byte |
~ |
~ |
~ |
~ |
✓ |
|
Short |
~ |
~ |
~ |
~ |
✓ |
|
Int |
~ |
~ |
~ |
~ |
✓ |
|
Long |
✓ |
~ |
~ |
~ |
✓ |
|
BigDecimal |
✓ |
✓ |
~ |
~ |
✓ |
|
Float |
✓ |
✓ |
~ |
~ |
✓ |
|
Double |
✓ |
✓ |
~ |
~ |
✓ |
|
String |
✓ |
✓ |
✓ |
✓ |
✓ |
|
CharacterStream |
× |
× |
✓ |
✓ |
× |
|
Bytes |
✓ |
✓ |
✓ |
✓ |
✓ |
|
Boolean |
✓ |
✓ |
✓ |
✓ |
✓ |