All Products
Search
Document Center

Tablestore:Gunakan kueri SQL dengan koneksi JDBC langsung

Last Updated:Jun 10, 2026

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.

  1. 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");
  2. 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&...&paramN=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);
  3. Jalankan pernyataan SQL.

    Gunakan createStatement atau prepareStatement untuk 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.

Penting

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:

  • disable: Tidak ada retry.

  • default: Melakukan retry pada error OTSNotEnoughCapacityUnit, OTSTableNotReady, OTSPartitionUnavailable, OTSServerBusy, OTSQuotaExhausted, OTSTimeout, OTSInternalServerError, dan OTSServerUnavailable hingga timeout.

retryTimeout

10

Nilai timeout retry dan satuan waktunya. Satuan waktu yang valid:

  • seconds

  • milliseconds

  • microseconds

  • nanoseconds

  • minutes

  • hours

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

  • Konversi ke tipe integer akan melemparkan exception jika nilainya di luar rentang.

  • Konversi ke tipe floating-point mungkin kehilangan presisi.

  • Konversi ke tipe string atau binary setara dengan toString().

  • Konversi ke tipe boolean mengembalikan true untuk nilai bukan nol.

Double

String

  • Konversi ke tipe integer atau floating-point akan melemparkan exception jika penguraian gagal.

  • Konversi ke tipe boolean mengembalikan true jika string bernilai "true".

Binary

Boolean

  • Konversi ke tipe integer atau floating-point mengembalikan 1 untuk true dan 0 untuk false.

  • Konversi ke tipe string atau binary setara dengan toString().

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.

Catatan

"✓" 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