Java Database Connectivity (JDBC) est une API Java standard permettant de se connecter aux bases de données et de les gérer. Cette rubrique explique comment se connecter à LindormTable via le protocole MySQL en utilisant le pilote JDBC MySQL, puis exécuter des opérations CRUD avec Lindorm SQL.
Fonctionnement
Ajoutez la dépendance du pilote JDBC MySQL à votre projet.
Initialisez le pilote et établissez une connexion à l'aide d'une URL JDBC pointant vers l'endpoint compatible MySQL de LindormTable.
Utilisez les API JDBC standard avec Lindorm SQL pour créer des tables, écrire des données, interroger et supprimer des enregistrements.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
La fonctionnalité de compatibilité MySQL activée sur votre instance Lindorm. Consultez la rubrique Activer la fonctionnalité de compatibilité MySQL
JDK 1.8 ou version ultérieure installé
L'adresse IP de votre client ajoutée à la liste d'autorisation de l'instance Lindorm. Consultez la rubrique Configurer une liste blanche
Étape 1 : Ajouter le pilote JDBC MySQL
Pour un projet Maven, ajoutez la dépendance suivante à la section dependencies du fichier pom.xml :
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.3.0</version>
</dependency>
Pour un projet Gradle, ajoutez ce qui suit à votre fichier build.gradle :
implementation 'com.mysql:mysql-connector-j:8.3.0'
Utilisez le pilote JDBC MySQL version 8.0 ou ultérieure. Pour les projets ne reposant pas sur Maven ou Gradle, ajoutez manuellement le fichier mysql-connector-java-x.x.x.jar à votre CLASSPATH, sans quoi la connexion échouera.
Étape 2 : Se connecter à LindormTable
Initialisez le pilote JDBC MySQL et établissez la connexion :
Class.forName("com.mysql.cj.jdbc.Driver");
// The database username from the Lindorm console.
String username = "root";
// The database password from the Lindorm console.
String password = "root";
// Specify the database to connect to. If omitted, the default database is used.
String database = "default";
// The LindormTable endpoint for MySQL. Port 33060 is fixed and must not be changed.
// Replace the hostname with your actual MySQL-compatible endpoint.
String url = "jdbc:mysql://ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com:33060/"
+ database
+ "?sslMode=disabled"
+ "&allowPublicKeyRetrieval=true"
+ "&useServerPrepStmts=true"
+ "&useLocalSessionState=true"
+ "&rewriteBatchedStatements=true"
+ "&cachePrepStmts=true"
+ "&prepStmtCacheSize=100"
+ "&prepStmtCacheSqlLimit=50000000";
Properties properties = new Properties();
properties.put("user", username);
properties.put("password", password);
Connection connection = DriverManager.getConnection(url, properties);
Paramètres de connexion
| Paramètre | Description |
|---|---|
url |
L'URL JDBC pour LindormTable via MySQL. Format : jdbc:mysql://<endpoint compatible MySQL>/<base de données>?<paramètres de connexion>. Si aucune base de données n'est spécifiée, le client se connecte à la base de données par défaut. Pour obtenir l'endpoint compatible MySQL, consultez la rubrique Afficher les endpoints. |
database |
La base de données à laquelle se connecter. Par défaut, il s'agit de la base de données par défaut si ce paramètre est omis. |
username |
Le nom d'utilisateur pour LindormTable. Pour réinitialiser un mot de passe oublié, consultez la rubrique Modifier le mot de passe d'un utilisateur. |
password |
Le mot de passe pour LindormTable. |
Sélectionnez l'endpoint en fonction de la manière dont votre client accède à l'instance Lindorm :
Virtual Private Cloud (VPC) (recommandé) : Utilisez l'adresse VPC compatible MySQL. Les applications s'exécutant sur des instances Elastic Compute Service (ECS) bénéficient d'une latence plus faible et d'une sécurité accrue grâce à une connexion VPC.
Réseau public : Activez l'endpoint public dans la console Lindorm et utilisez l'adresse Internet compatible MySQL. Consultez la rubrique Afficher les endpoints de LindormTable.
Paramètres de connexion
Tous les paramètres de connexion présents dans l'URL sont requis. Le tableau suivant détaille chaque paramètre :
| Paramètre | Valeur | Description |
|---|---|---|
sslMode |
disabled |
Désactive le chiffrement SSL. Améliore les performances. |
allowPublicKeyRetrieval |
true |
Récupère la clé publique RSA depuis le serveur lors de l'authentification. |
useServerPrepStmts |
true |
Utilise les instructions préparées côté serveur, ce qui améliore les performances et réduit le risque d'injection SQL. |
useLocalSessionState |
true |
Utilise l'état de session local pour réduire les allers-retours vers le serveur de base de données. |
rewriteBatchedStatements |
true |
Réécrit les appels INSERT groupés en instructions multi-lignes, améliorant considérablement les performances d'écriture. Par exemple, trois insertions distinctes sont envoyées sous forme d'une seule instruction : INSERT INTO t (a) VALUES (1), (2), (3) au lieu de trois appels INSERT INTO t (a) VALUES (?) individuels. |
cachePrepStmts |
true |
Met en cache les instructions préparées côté client, réduisant la surcharge de création pour les instructions fréquemment exécutées. |
prepStmtCacheSize |
100 |
Le nombre d'instructions préparées mises en cache. Ce paramètre prend effet uniquement lorsque cachePrepStmts=true. Augmentez cette valeur si votre charge de travail utilise de nombreuses instructions SQL distinctes, tout en gardant à l'esprit qu'un cache plus volumineux consomme davantage de mémoire. |
prepStmtCacheSqlLimit |
50000000 |
La longueur maximale en octets des instructions SQL éligibles à la mise en cache. Les instructions dépassant cette limite ne sont pas mises en cache. Augmentez cette valeur pour les charges de travail sensibles aux performances comportant de longues instructions SQL. |
Étape 3 : Exécuter des opérations SQL
Une fois connecté, utilisez Lindorm SQL pour créer des tables, insérer, interroger et supprimer des données :
String tableName = "sql_table_" + new Random().nextInt(1000);
// Create a table.
try (Statement statement = connection.createStatement()) {
String sql = "CREATE TABLE IF NOT EXISTS " + tableName
+ "(id VARCHAR, name VARCHAR, PRIMARY KEY(id))";
int ret = statement.executeUpdate(sql);
System.out.println(ret);
}
// Insert data in a batch. Use INSERT — in Lindorm SQL, INSERT has UPSERT semantics.
String upsertSql = "INSERT INTO " + tableName + "(id, name) VALUES(?, ?)";
try (PreparedStatement ps = connection.prepareStatement(upsertSql)) {
int batchSize = 100;
for (int i = 0; i < batchSize; i++) {
ps.setString(1, "aa" + i);
ps.setString(2, "bb" + i);
ps.addBatch();
}
int[] ret = ps.executeBatch();
System.out.println(Arrays.toString(ret));
}
// Query data.
String querySql = "SELECT * FROM " + tableName + " WHERE id = ?";
try (PreparedStatement ps = connection.prepareStatement(querySql)) {
ps.setString(1, "aa1");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
String id = rs.getString(1);
String name = rs.getString(2);
System.out.println("id=" + id);
System.out.println("name=" + name);
}
}
// Delete data.
String deleteSql = "DELETE FROM " + tableName + " WHERE id = ?";
try (PreparedStatement ps = connection.prepareStatement(deleteSql)) {
ps.setString(1, "aa1");
ps.executeUpdate();
}
// Always close the connection to prevent resource leaks.
connection.close();
Pour la référence complète de la syntaxe Lindorm SQL, consultez la rubrique Référence SQL.
Notes d'utilisation
Sémantique INSERT et UPSERT
Dans Lindorm SQL, l'instruction INSERT possède la même sémantique que UPSERT. Le client JDBC MySQL optimise les instructions INSERT ; utilisez donc INSERT pour toutes les écritures de données.
Dimensionnement des écritures par lot
Les écritures par lot réduisent la surcharge des appels de procédure distante (RPC) et permettent au serveur de traiter plusieurs lignes par requête, augmentant ainsi le débit par rapport aux écritures ligne par ligne. Toutefois, des lots trop volumineux peuvent provoquer des erreurs de mémoire insuffisante (OOM) ou des pauses de garbage collection complet (Full GC), ce qui dégrade la stabilité du service. Maintenez la valeur de batchSize entre 50 et 100 lignes. Pour augmenter le débit d'écriture global, privilégiez l'augmentation de la concurrence d'écriture plutôt que la taille des lots.
Étapes suivantes
Référence SQL — syntaxe complète de Lindorm SQL
Afficher les endpoints — localiser votre endpoint compatible MySQL
Configurer une liste blanche — gérer le contrôle d'accès par adresse IP