Tous les produits
Search
Centre de documentation

Tablestore:Utiliser des requêtes SQL avec une connexion JDBC directe

Dernière mise à jour :Aug 18, 2026

Connectez-vous directement à une instance Tablestore et exécutez des requêtes SQL via l'interface JDBC standard avec le pilote com.aliyun.openservices:tablestore-jdbc.

Prérequis

  • Une paire AccessKey (les utilisateurs RAM doivent disposer de l'autorisation "Action": "ots:SQL*")

  • Une table de données et sa table de mappage (Opérations DDL)

Étape 1 : Installer le pilote JDBC

Le pilote est disponible sous forme de dépendance Maven ou de fichier JAR autonome.

Dépendance Maven

Ajoutez la dépendance du pilote JDBC Tablestore à la section <dependencies> de votre fichier pom.xml Maven. L'exemple suivant utilise la version 5.17.0 :

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

Installation manuelle

Téléchargez le pilote JDBC Tablestore et importez-le dans votre projet.

Étape 2 : Utiliser une connexion JDBC directe

Chargez le pilote, connectez-vous à une instance, puis exécutez des instructions SQL.

  1. Chargez le pilote JDBC Tablestore avec Class.forName().

    Le nom de la classe du pilote est com.alicloud.openservices.tablestore.jdbc.OTSDriver.

    Class.forName("com.alicloud.openservices.tablestore.jdbc.OTSDriver");
  2. Connectez-vous à une instance Tablestore avec JDBC.

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

    Le tableau suivant décrit les paramètres de connexion.

    Paramètre

    Description

    url

    L'URL JDBC Tablestore. Format : jdbc:ots:schema://[accessKeyId:accessKeySecret@]endpoint/instanceName[?param1=value1&...&paramN=valueN]. Les champs de l'URL sont :

    • schema (obligatoire) : Le protocole. Définissez ce champ sur https.

    • accessKeyId:accessKeySecret (facultatif) : L'ID AccessKey et le secret AccessKey de votre compte Alibaba Cloud ou utilisateur RAM.

    • endpoint (obligatoire) : Le endpoint de l'instance.

    • instanceName (obligatoire) : Le nom de l'instance.

    Pour les autres éléments de configuration, consultez la section Configuration.

    user

    L'ID AccessKey de votre compte Alibaba Cloud ou utilisateur RAM.

    password

    Le secret AccessKey de votre compte Alibaba Cloud ou utilisateur RAM.

    Transmettez votre paire AccessKey et vos paramètres via l'URL ou un objet Properties. Les exemples suivants se connectent à l'instance myinstance dans la région Chine (Hangzhou) via 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. Exécutez des instructions SQL.

    Utilisez createStatement ou prepareStatement pour exécuter des requêtes.

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

Exemple complet

L'exemple suivant interroge les données de la table test_table dans une instance 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();
    }
}

Configuration

Le pilote JDBC Tablestore est construit sur le SDK Java et prend en charge la configuration via les paramètres d'URL ou les propriétés.

Important

Le délai d'expiration côté serveur pour les requêtes SQL est de 30 secondes. Pour définir un délai d'expiration plus court, définissez syncClientWaitFutureTimeoutInMillis sur une valeur inférieure à 30000, ou appelez setQueryTimeout sur chaque instruction Statement.

Paramètre

Valeur par défaut

Description

enableRequestCompression

false

Indique s'il faut compresser les données de la requête.

enableResponseCompression

false

Indique s'il faut compresser les données de la réponse.

ioThreadCount

2

Le nombre de threads IOReactor dans HttpAsyncClient.

maxConnections

300

Le nombre maximal de connexions HTTP.

socketTimeoutInMillisecond

30000

Le délai d'expiration pour le transfert de données au niveau de la couche socket. Unité : millisecondes. Une valeur de 0 signifie qu'il n'y a pas de délai d'expiration.

connectionTimeoutInMillisecond

30000

Le délai d'expiration pour l'établissement d'une connexion. Unité : millisecondes. Une valeur de 0 signifie qu'il n'y a pas de délai d'expiration.

retryThreadCount

1

Le nombre de threads dans le pool de threads de nouvelle tentative.

syncClientWaitFutureTimeoutInMillis

-1

Le délai d'expiration pour l'attente asynchrone. Unité : millisecondes.

connectionRequestTimeoutInMillisecond

60000

Le délai d'expiration pour l'envoi d'une requête. Unité : millisecondes.

retryStrategy

default

La politique de nouvelle tentative. Valeurs valides :

  • disable : Aucune nouvelle tentative.

  • default : Nouvelles tentatives en cas d'erreurs OTSNotEnoughCapacityUnit, OTSTableNotReady, OTSPartitionUnavailable, OTSServerBusy, OTSQuotaExhausted, OTSTimeout, OTSInternalServerError et OTSServerUnavailable jusqu'à expiration du délai.

retryTimeout

10

La valeur du délai d'expiration de la nouvelle tentative et l'unité de temps. Unités de temps valides :

  • seconds

  • milliseconds

  • microseconds

  • nanoseconds

  • minutes

  • hours

retryTimeoutUnit

seconds

Conversion des types de données

Tablestore prend en charge cinq types de données : Integer, Double, String, Binary et Boolean. Le pilote JDBC convertit automatiquement les types Java en types de données Tablestore et vice versa.

Java vers Tablestore

Lorsque vous définissez des paramètres SQL avec PreparedStatement, le pilote prend en charge les types Byte, Short, Int, Long, BigDecimal, Float, Double, String, CharacterStream, Bytes et 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

Tablestore vers Java

Lorsque vous lisez les résultats d'un ResultSet, le pilote JDBC convertit automatiquement les types de données selon les règles suivantes.

Type Tablestore

Règles de conversion

Integer

  • La conversion vers un type entier lève une exception si la valeur est hors plage.

  • La conversion vers un type à virgule flottante peut entraîner une perte de précision.

  • La conversion vers un type chaîne ou binaire équivaut à toString().

  • La conversion vers un type booléen renvoie true pour les valeurs non nulles.

Double

String

  • La conversion vers un type entier ou à virgule flottante lève une exception si l'analyse échoue.

  • La conversion vers un type booléen renvoie true si la chaîne est « true ».

Binary

Boolean

  • La conversion vers un type entier ou à virgule flottante renvoie 1 pour true et 0 pour false.

  • La conversion vers un type chaîne ou binaire équivaut à 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
}

Le tableau suivant indique quelles conversions entre les types de données Tablestore et les types Java sont prises en charge.

Remarque

« ✓ » indique une conversion normale, « ~ » indique une exception possible et « × » indique une conversion non prise en charge.

Type

Integer

Double

String

Binary

Boolean

Byte

~

~

~

~

✓

Short

~

~

~

~

✓

Int

~

~

~

~

✓

Long

✓

~

~

~

✓

BigDecimal

✓

✓

~

~

✓

Float

✓

✓

~

~

✓

Double

✓

✓

~

~

✓

String

✓

✓

✓

✓

✓

CharacterStream

×

×

✓

✓

×

Bytes

✓

✓

✓

✓

✓

Boolean

✓

✓

✓

✓

✓