全部产品
Search
文档中心

AnalyticDB:JDBC

更新时间:Jul 02, 2025

Topik ini menjelaskan cara menggunakan MySQL Java Database Connectivity (JDBC) untuk terhubung ke kluster AnalyticDB for MySQL.

Versi driver MySQL JDBC yang didukung

AnalyticDB for MySQL mendukung versi driver MySQL JDBC berikut:

  • Seri 5.0: 5.0.2, 5.0.3, 5.0.4, 5.0.5, 5.0.7, dan 5.0.8.

  • Seri 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, dan 5.1.34.

  • Seri 8.0.

Catatan penggunaan

  • Untuk menetapkan koneksi menggunakan driver MySQL JDBC, Anda harus secara manual menambahkan paket driver (mysql-connector-java-x.x.x.jar) ke CLASSPATH. Jika tidak, koneksi tidak dapat ditetapkan.

  • Untuk menggunakan fitur multi-statement guna mengeksekusi beberapa pernyataan SQL secara berturut-turut, jalankan pernyataan SET ADB_CONFIG ALLOW_MULTI_QUERIES=true; untuk mengaktifkan fitur multi-statement dan atur properti allowMultiQueries menjadi true.

    Catatan

    Hanya kluster AnalyticDB for MySQL versi V3.1.9.3 atau lebih baru yang mendukung fitur multi-statement.

Contoh kode untuk menetapkan koneksi MySQL JDBC tanpa percobaan ulang

Untuk terhubung ke kluster AnalyticDB for MySQL menggunakan driver MySQL JDBC, tambahkan contoh kode berikut ke kode Java sistem bisnis Anda:

Connection connection = null;
Statement statement = null;
ResultSet rs = null;
try {
    Class.forName("com.mysql.jdbc.Driver");
    // adb_url: titik akhir kluster AnalyticDB for MySQL yang ingin Anda hubungkan. Anda dapat memperoleh titik akhir di halaman Informasi Kluster konsol AnalyticDB for MySQL. Nomor port default adalah 3306.
    // db_name: nama database dalam kluster AnalyticDB for MySQL.
    String url = "jdbc:mysql://adb_url:3306/db_name?useUnicode=true&characterEncoding=UTF-8";
    Properties connectionProps = new Properties();
    // account_name: akun yang digunakan untuk terhubung ke kluster AnalyticDB for MySQL. Akun tersebut bisa berupa akun istimewa atau standar.
    connectionProps.put("user", "account_name");
    // account_password: kata sandi akun yang digunakan untuk terhubung ke kluster AnalyticDB for MySQL.
    connectionProps.put("password", "account_password");
    connection = DriverManager.getConnection(url, connectionProps);
    statement = connection.createStatement();
    String query = "select count(*) from information_schema.tables";
    rs = statement.executeQuery(query);
    while (rs.next()) {
        System.out.println(rs.getObject(1));
    }
} catch (ClassNotFoundException e) {
    e.printStackTrace();
} catch (SQLException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (statement != null) {
        try {
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (connection != null) {
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
            

Contoh kode untuk menetapkan koneksi MySQL JDBC dengan percobaan ulang

Saat menetapkan koneksi MySQL JDBC, Anda dapat mengonfigurasi parameter berikut untuk mengimplementasikan percobaan ulang koneksi:

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 {
    // db_name: nama database dalam kluster AnalyticDB for MySQL.
    String yourDB = "db_name";  
    // account_name: akun yang digunakan untuk terhubung ke kluster AnalyticDB for MySQL. Akun tersebut bisa berupa akun istimewa atau standar.
    String username = "account_name";  
    // account_password: kata sandi akun yang digunakan untuk terhubung ke kluster AnalyticDB for MySQL.
    String password = "account_password"; 
    Class.forName("com.mysql.jdbc.Driver");
    // adb_url: titik akhir kluster AnalyticDB for MySQL yang ingin Anda hubungkan. Anda dapat memperoleh titik akhir di halaman Informasi Kluster konsol AnalyticDB for MySQL. Nomor port default adalah 3306.
    String url = "jdbc:mysql://adb_url: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;
    // Jalankan percobaan ulang otomatis menggunakan loop.
    while (retryTimes < MAX_QUERY_RETRY_TIMES) {
        try {
            getConn(url, connectionProps);
            execQuery(query);// Jalankan kueri.
            break; // Jika kueri dijalankan, keluar dari loop.
        } catch (SQLException e) {
            System.out.println("Terjadi pengecualian SQL: " + e.getMessage() + ", lalu lanjutkan ke tugas percobaan ulang ...");
            try {
                if (conn == null || conn.isClosed()) {
                    retryTimes++;
                }
            } catch (SQLException e1) {
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e2) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    // Bersihkan sumber daya koneksi.
    closeResource();
}
/**
 * Dapatkan koneksi.
 *
 * @param url
 * @param connectionProps
 * @throws SQLException
 */
public static void getConn(String url, Properties connectionProps) throws SQLException {
    conn = DriverManager.getConnection(url, connectionProps);
}
/**
 * Logika eksekusi tugas kueri.
 *
 * @param sql
 * @throws SQLException
 */
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("Waktu Elaps: " + (endTs - startTs));
        System.out.println("Jumlah baris: " + cnt);
        try {
            Thread.sleep(160000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
/**
 * Tutup sumber daya koneksi.
 */
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();
        }
    }
}
            

FAQ

T: Akses Internet diaktifkan dan alamat IP publik dapat diping, tetapi koneksi JDBC gagal. Mengapa?

J: Jalankan perintah curl ipinfo.io/ip untuk memperoleh alamat IP publik. Tambahkan alamat IP tersebut ke daftar putih alamat IP kluster AnalyticDB for MySQL Anda. Untuk informasi lebih lanjut, lihat Daftar Putih Alamat IP.