Todos os produtos
Search
Central de documentação

Tablestore:Use SQL queries with a direct JDBC connection

Última atualização: Jul 10, 2026

Conecte-se diretamente a uma instância do Tablestore e execute consultas SQL por meio da interface JDBC padrão com o driver com.aliyun.openservices:tablestore-jdbc.

Pré-requisitos

  • Um par de AccessKey (usuários RAM exigem a permissão "Action": "ots:SQL*")

  • Uma tabela de dados e sua tabela de mapeamento (Operações DDL)

Etapa 1: Instale o driver JDBC

O driver está disponível como uma dependência Maven ou um JAR independente.

Dependência Maven

Adicione a dependência do driver JDBC do Tablestore à seção <dependencies> do seu arquivo pom.xml do Maven. O exemplo a seguir usa a versão 5.17.0:

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

Instalação manual

Baixe o driver JDBC do Tablestore e importe-o para o seu projeto.

Etapa 2: Use uma conexão JDBC direta

Carregue o driver, conecte-se a uma instância e execute instruções SQL.

  1. Carregue o driver JDBC do Tablestore com Class.forName().

    O nome da classe do driver é com.alicloud.openservices.tablestore.jdbc.OTSDriver.

    Class.forName("com.alicloud.openservices.tablestore.jdbc.OTSDriver");
  2. Conecte-se a uma instância do Tablestore com JDBC.

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

    A tabela a seguir descreve os parâmetros de conexão.

    Parâmetro

    Descrição

    url

    A URL JDBC do Tablestore. Formato: jdbc:ots:schema://[accessKeyId:accessKeySecret@]endpoint/instanceName[?param1=value1&...&paramN=valueN]. Os campos da URL são:

    • schema (obrigatório): O protocolo. Defina este campo como https.

    • accessKeyId:accessKeySecret (opcional): O AccessKey ID e o AccessKey Secret da sua conta Alibaba Cloud ou usuário RAM.

    • endpoint (obrigatório): O endpoint da instância.

    • instanceName (obrigatório): O nome da instância.

    Para outros itens de configuração, consulte Configuração.

    user

    O AccessKey ID da sua conta Alibaba Cloud ou usuário RAM.

    password

    O AccessKey Secret da sua conta Alibaba Cloud ou usuário RAM.

    Forneça seu par de AccessKey e configurações por meio da URL ou de um objeto Properties. Os exemplos a seguir conectam-se à instância myinstance na região China (Hangzhou) pela 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. Execute instruções SQL.

    Utilize createStatement ou prepareStatement para executar consultas.

    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();

Exemplo completo

O exemplo a seguir consulta dados da tabela test_table em uma instância do 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();
    }
}

Configuração

O driver JDBC do Tablestore é construído sobre o Java SDK e suporta configuração por meio de parâmetros de URL ou Properties.

Importante

O tempo limite no servidor para solicitações SQL é de 30 segundos. Para definir um tempo limite menor, defina syncClientWaitFutureTimeoutInMillis com um valor inferior a 30000 ou chame setQueryTimeout em cada Statement.

Parâmetro

Padrão

Descrição

enableRequestCompression

false

Define se os dados da solicitação devem ser compactados.

enableResponseCompression

false

Define se os dados da resposta devem ser compactados.

ioThreadCount

2

Número de threads IOReactor no HttpAsyncClient.

maxConnections

300

Quantidade máxima de conexões HTTP.

socketTimeoutInMillisecond

30000

Tempo limite para transferência de dados na camada de soquete. Unidade: milissegundos. Um valor de 0 indica que não há tempo limite.

connectionTimeoutInMillisecond

30000

Tempo limite para estabelecer uma conexão. Unidade: milissegundos. Um valor de 0 indica que não há tempo limite.

retryThreadCount

1

Quantidade de threads no pool de threads de nova tentativa.

syncClientWaitFutureTimeoutInMillis

-1

Tempo limite para espera assíncrona. Unidade: milissegundos.

connectionRequestTimeoutInMillisecond

60000

Tempo limite para envio de uma solicitação. Unidade: milissegundos.

retryStrategy

default

Política de nova tentativa. Valores válidos:

  • disable: Sem novas tentativas.

  • default: Tenta novamente em erros OTSNotEnoughCapacityUnit, OTSTableNotReady, OTSPartitionUnavailable, OTSServerBusy, OTSQuotaExhausted, OTSTimeout, OTSInternalServerError e OTSServerUnavailable até atingir o tempo limite.

retryTimeout

10

Valor do tempo limite de nova tentativa e unidade de tempo. Unidades de tempo válidas:

  • seconds

  • milliseconds

  • microseconds

  • nanoseconds

  • minutes

  • hours

retryTimeoutUnit

seconds

Conversão de tipos de dados

O Tablestore suporta cinco tipos de dados: Integer, Double, String, Binary e Boolean. O driver JDBC converte automaticamente entre tipos Java e tipos de dados do Tablestore.

De Java para Tablestore

Ao definir parâmetros SQL com PreparedStatement, o driver suporta os tipos Byte, Short, Int, Long, BigDecimal, Float, Double, String, CharacterStream, Bytes e Boolean.

PreparedStatement stmt = conn.prepareStatement("SELECT * FROM t WHERE pk = ?");
stmt.setLong(1, 1);                                // Supported
stmt.setURL(1, new URL("https://aliyun.com/"));    // Not supported — throws an exception

De Tablestore para Java

Ao ler resultados de um ResultSet, o driver JDBC converte automaticamente os tipos de dados de acordo com as regras a seguir.

Tipo do Tablestore

Regras de conversão

Integer

  • A conversão para um tipo inteiro gera uma exceção se o valor estiver fora do intervalo.

  • A conversão para um tipo de ponto flutuante pode perder precisão.

  • A conversão para um tipo string ou binário equivale a toString().

  • A conversão para um tipo booleano retorna true para valores diferentes de zero.

Double

String

  • A conversão para um tipo inteiro ou de ponto flutuante gera uma exceção se a análise falhar.

  • A conversão para um tipo booleano retorna true se a string for "true".

Binary

Boolean

  • A conversão para um tipo inteiro ou de ponto flutuante retorna 1 para true e 0 para false.

  • A conversão para um tipo string ou binário equivale a toString().

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT count(*) FROM t");
while (rs.next()) {
    rs.getLong(1);               // Supported
    rs.getCharacterStream(1);    // Not supported — throws an exception
}

A tabela a seguir mostra quais conversões entre tipos de dados do Tablestore e tipos Java são suportadas.

Nota

"✓" indica conversão normal, "~" indica possível exceção e "×" indica conversão não suportada.

Tipo

Integer

Double

String

Binary

Boolean

Byte

Short

Int

Long

BigDecimal

Float

Double

String

CharacterStream

×

×

×

Bytes

Boolean