Tous les produits
Search
Centre de documentation

AnalyticDB:JDBC

Dernière mise à jour :Aug 10, 2026

Connectez-vous à un cluster AnalyticDB for MySQL à l'aide du pilote MySQL Java Database Connectivity (JDBC).

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un cluster AnalyticDB for MySQL doté d'une base de données et d'un compte (privilégié ou standard)

  • L'endpoint et le port du cluster (par défaut : 3306), disponibles sur la page Cluster Information dans la console AnalyticDB for MySQL

Ajout de la dépendance du pilote

Téléchargez le fichier JAR (mysql-connector-java-x.x.x.jar) et ajoutez-le au CLASSPATH.

Versions de pilotes prises en charge

AnalyticDB for MySQL prend en charge les versions suivantes du pilote MySQL JDBC :

  • Série 5.0 : 5.0.2, 5.0.3, 5.0.4, 5.0.5, 5.0.7 et 5.0.8

  • Série 5.1 : 5.1.1, 5.1.2, 5.1.3, 5.1.4, 5.1.5, 5.1.6, 5.1.7, 5.1.8, 5.1.11, 5.1.12, 5.1.13, 5.1.14, 5.1.15, 5.1.16, 5.1.17, 5.1.18, 5.1.19, 5.1.20, 5.1.21, 5.1.22, 5.1.23, 5.1.24, 5.1.25, 5.1.26, 5.1.27, 5.1.28, 5.1.29, 5.1.31, 5.1.32, 5.1.33 et 5.1.34

  • Série 8,0 : toutes les versions

Format de l'URL de connexion

jdbc:mysql://<endpoint>:<port>/<db_name>?useUnicode=true&characterEncoding=UTF-8
Espace réservé Description Exemple
<endpoint> Endpoint du cluster, disponible sur la page Cluster Information am-xxx.ads.aliyuncs.com
<port> Numéro de port 3306 (par défaut)
<db_name> Nom de la base de données mydb

Connexion sans nouvelle tentative

Utilisez l'instruction try-with-resources pour fermer automatiquement la connexion, l'instruction et le jeu de résultats :

String url = "jdbc:mysql://<endpoint>:3306/<db_name>?useUnicode=true&characterEncoding=UTF-8";

Properties props = new Properties();
props.put("user", "<account_name>");      // Privileged or standard account
props.put("password", "<account_password>");

Class.forName("com.mysql.jdbc.Driver");

try (Connection conn = DriverManager.getConnection(url, props);
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM information_schema.tables")) {
    while (rs.next()) {
        System.out.println(rs.getObject(1));
    }
} catch (ClassNotFoundException | SQLException e) {
    e.printStackTrace();
}

Remplacez <endpoint>, <db_name>, <account_name> et <account_password> par vos valeurs réelles.

Connexion avec nouvelles tentatives

Pour une utilisation en production, implémentez une logique de nouvelle tentative afin de gérer les échecs de connexion transitoires :

public static final int MAX_QUERY_RETRY_TIMES = 3;
public static Connection conn = null;
public static Statement statement = null;
public static ResultSet rs = null;

public static void main(String[] args) throws ClassNotFoundException {
    String yourDB = "<db_name>";
    String username = "<account_name>";
    String password = "<account_password>";

    Class.forName("com.mysql.jdbc.Driver");
    String url = "jdbc:mysql://<endpoint>:3306/" + yourDB + "?useUnicode=true&characterEncoding=UTF-8";

    Properties connectionProps = new Properties();
    connectionProps.put("user", username);
    connectionProps.put("password", password);

    String query = "SELECT id FROM test4dmp.test LIMIT 10";
    int retryTimes = 0;

    // Retry on failure, up to MAX_QUERY_RETRY_TIMES attempts
    while (retryTimes < MAX_QUERY_RETRY_TIMES) {
        try {
            getConn(url, connectionProps);
            execQuery(query);
            break; // Query succeeded; exit the loop
        } catch (SQLException e) {
            System.out.println("SQL exception: " + e.getMessage() + ". Retrying...");
            try {
                if (conn == null || conn.isClosed()) {
                    retryTimes++;
                }
            } catch (SQLException e1) {
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e2) {
                        e2.printStackTrace();
                    }
                }
            }
        }
    }
    closeResource();
}

/** Open a connection. */
public static void getConn(String url, Properties connectionProps) throws SQLException {
    conn = DriverManager.getConnection(url, connectionProps);
}

/** Run the query 10 times and print elapsed time and row count for each iteration. */
public static void execQuery(String sql) throws SQLException {
    Statement statement = null;
    ResultSet rs = null;
    statement = conn.createStatement();
    for (int i = 0; i < 10; i++) {
        long startTs = System.currentTimeMillis();
        rs = statement.executeQuery(sql);
        int cnt = 0;
        while (rs.next()) {
            cnt++;
            System.out.println(rs.getObject(1));
        }
        long endTs = System.currentTimeMillis();
        System.out.println("Elapsed: " + (endTs - startTs) + " ms | Rows: " + cnt);
        try {
            Thread.sleep(160000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

/** Release all connection resources. */
public static void closeResource() {
    if (rs != null) {
        try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }
    }
    if (statement != null) {
        try { statement.close(); } catch (SQLException e) { e.printStackTrace(); }
    }
    if (conn != null) {
        try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }
    }
}

Exécution de plusieurs instructions

Pour exécuter plusieurs instructions SQL consécutivement, activez la fonctionnalité multi-instructions avant l'exécution :

SET ADB_CONFIG ALLOW_MULTI_QUERIES=true;

Définissez également allowMultiQueries=true dans l'URL de connexion JDBC :

jdbc:mysql://<endpoint>:3306/<db_name>?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
Remarque

L'exécution de plusieurs instructions nécessite AnalyticDB for MySQL V3.1.9.3 ou une version ultérieure.

  • Pour vérifier la version mineure d'un cluster Data Lakehouse Edition, exécutez SELECT adb_version();. Pour mettre à jour la version mineure d'un cluster, contactez le support technique.

  • Pour afficher ou mettre à jour la version mineure d'un cluster Data Warehouse Edition, consultez la rubrique Mise à jour de la version mineure d'un cluster.

FAQ

L'accès Internet est activé et l'adresse IP publique est accessible, mais la connexion JDBC échoue.

Votre adresse IP publique ne figure peut-être pas sur la liste d'autorisation du cluster. Exécutez la commande suivante pour obtenir votre adresse IP publique, puis ajoutez-la à la liste d'autorisation des adresses IP de votre cluster :

curl ipinfo.io/ip

Pourquoi obtiens-je une erreur « MySQL server has gone away » après avoir établi une connexion JDBC ?

Cette erreur est généralement causée par un délai d'inactivité de la connexion ou une interruption réseau. Elle n'est pas liée à l'expiration éventuelle de l'abonnement de votre instance.

Si votre application doit maintenir des connexions de longue durée, ajoutez un mécanisme de nouvelle tentative de connexion à votre code. Pour une implémentation de référence, consultez la section Connexion avec nouvelles tentatives de ce document.