Todos os produtos
Search
Central de documentação

AnalyticDB:JDBC

Última atualização: Jul 24, 2026

Conecte-se a um cluster do AnalyticDB for MySQL usando o driver MySQL Java Database Connectivity (JDBC).

Pré-requisitos

Antes de começar, verifique se você tem:

  • Um cluster do AnalyticDB for MySQL com um banco de dados e uma conta (privilegiada ou padrão)

  • O endpoint e a porta do cluster (padrão: 3306), disponíveis na página Cluster Information no console do AnalyticDB for MySQL

Adicione a dependência do driver

Baixe o arquivo JAR (mysql-connector-java-x.x.x.jar) e adicione-o ao CLASSPATH.

Versões de driver compatíveis

O AnalyticDB for MySQL é compatível com as seguintes versões do driver MySQL JDBC:

  • Série 5.0: 5.0.2, 5.0.3, 5.0.4, 5.0.5, 5.0.7 e 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 e 5.1.34

  • Série 8.0: todas as versões

Formato da URL de conexão

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

Espaço reservado

Descrição

Exemplo

<endpoint>

Endpoint do cluster, obtido na página Cluster Information

am-xxx.ads.aliyuncs.com

<port>

Número da porta

3306 (padrão)

<db_name>

Nome do banco de dados

mydb

Conexão sem novas tentativas

Use try-with-resources para fechar automaticamente a conexão, o statement e o conjunto de resultados:

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

Substitua <endpoint>, <db_name>, <account_name> e <account_password> pelos valores reais.

Conexão com novas tentativas

Para uso em produção, implemente uma lógica de nova tentativa para lidar com falhas transitórias de conexão:

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

Execução de múltiplos statements

Para executar vários statements SQL consecutivamente, ative o recurso de múltiplos statements antes da execução:

SET ADB_CONFIG ALLOW_MULTI_QUERIES=true;

Defina também allowMultiQueries=true na URL de conexão JDBC:

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

A execução de múltiplos statements requer o AnalyticDB for MySQL V3.1.9.3 ou posterior.

  • Para verificar a versão secundária de um cluster Data Lakehouse Edition, execute SELECT adb_version();. Para atualizar a versão secundária de um cluster, entre em contato com o suporte técnico.

  • Para visualizar ou atualizar a versão secundária de um cluster Data Warehouse Edition, consulte Update the minor version of a cluster.

Perguntas frequentes

O acesso à internet está ativado e o endereço IP público está acessível, mas a conexão JDBC falha.

Seu endereço IP público pode não estar na lista de permissões do cluster. Execute o comando a seguir para obter seu endereço IP público e adicione-o à IP address whitelist do cluster:

curl ipinfo.io/ip

Por que recebo o erro "MySQL server has gone away" após estabelecer uma conexão JDBC?

Esse erro geralmente ocorre devido ao tempo limite de ociosidade da conexão ou a uma interrupção de rede, e não está relacionado à expiração da assinatura da instância.

Se sua aplicação precisar manter conexões de longa duração, adicione um mecanismo de nova tentativa de conexão ao código. Para uma implementação de referência, consulte a seção Conexão com novas tentativas neste documento.