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.
-
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"); -
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&...¶mN=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); -
-
Exécutez des instructions SQL.
Utilisez
createStatementouprepareStatementpour 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.
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 :
|
|
retryTimeout |
10 |
La valeur du délai d'expiration de la nouvelle tentative et l'unité de temps. Unités de temps valides :
|
|
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 |
|
|
Double |
|
|
String |
|
|
Binary |
|
|
Boolean |
|
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.
« ✓ » 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 |
✓ |
✓ |
✓ |
✓ |
✓ |