日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

JDBC

更新時間:

本文介紹如何在Java中通過MySQL JDBC連接AnalyticDB for MySQL集群。

MySQL JDBC驅(qū)動版本

AnalyticDB for MySQL支持以下版本的MySQL JDBC驅(qū)動。

  • 5.0版本系列:5.0.2,5.0.3,5.0.4,5.0.5,5.0.7,5.0.8。

  • 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, 5.1.34。

  • MySQL 8.0。

注意事項

  • Java中創(chuàng)建MySQL JDBC連接依賴于MySQL-JDBC驅(qū)動包,您需要手動將MySQL-JDBC驅(qū)動包(mysql-connector-java-x.x.x.jar)加入到CLASSPATH中,否則無法創(chuàng)建MySQL JDBC連接。

  • 若您需要使用Multi-Statement功能連續(xù)執(zhí)行多個SQL語句時,請執(zhí)行SET ADB_CONFIG ALLOW_MULTI_QUERIES=true;命令手動開啟Multi-Statement功能,并將配置JDBC連接屬性allowMultiQueries配置為true

    說明

    僅3.1.9.3及以上內(nèi)核版本的集群支持Multi-Statement功能。

    • 查看企業(yè)版基礎(chǔ)版湖倉版集群的內(nèi)核版本,請執(zhí)行SELECT adb_version();。如需升級內(nèi)核版本,請聯(lián)系技術(shù)支持。

    • 查看和升級數(shù)倉版集群的內(nèi)核版本,請參見查看和升級版本

不帶重試的JDBC連接示例

您可以在業(yè)務(wù)系統(tǒng)的Java代碼中添加以下代碼,通過MySQL JDBC連接AnalyticDB for MySQL集群。

Connection connection = null;
Statement statement = null;
ResultSet rs = null;
try {
    Class.forName("com.mysql.jdbc.Driver");
    //adb_url是AnalyticDB MySQL集群的連接地址URL,可以在控制臺的集群信息頁面獲取連接URL,3306是端口號。
    //db_name是AnalyticDB MySQL集群中的數(shù)據(jù)庫名稱。
    String url = "jdbc:mysql://adb_url:3306/db_name?useUnicode=true&characterEncoding=UTF-8";
    Properties connectionProps = new Properties();
    //account_name是AnalyticDB MySQL集群中的用戶賬號:高權(quán)限賬號或者普通賬號。
    connectionProps.put("user", "account_name");
    //account_password是AnalyticDB MySQL集群中用戶賬號對應(yīng)的密碼。
    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();
        }
    }
}
            

帶重試的JDBC連接示例

在JDBC中通過配置參數(shù)可以實現(xiàn)連接重試機制。

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 {
    //AnalyticDB MySQL集群中的數(shù)據(jù)庫名稱。
    String yourDB = "db_name";  
    //AnalyticDB MySQL集群中的用戶賬號:高權(quán)限賬號或者普通賬號。
    String username = "account_name";  
    //AnalyticDB MySQL集群中用戶賬號對應(yīng)的密碼。
    String password = "account_password"; 
    Class.forName("com.mysql.jdbc.Driver");
    //adb_url是AnalyticDB MySQL集群的連接地址URL,可以在控制臺的集群信息頁面獲取連接URL,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;
    // 通過循環(huán)自動重試。
    while (retryTimes < MAX_QUERY_RETRY_TIMES) {
        try {
            getConn(url, connectionProps);
            execQuery(query);//執(zhí)行query。
            break; // query執(zhí)行成功后,結(jié)束整個循環(huán)。
        } catch (SQLException e) {
            System.out.println("Met SQL exception: " + e.getMessage() + ", then go to retry task ...");
            try {
                if (conn == null || conn.isClosed()) {
                    retryTimes++;
                }
            } catch (SQLException e1) {
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e2) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    // Clear connection resource.
    closeResource();
}
/**
 * Get connection.
 *
 * @param url
 * @param connectionProps
 * @throws SQLException
 */
public static void getConn(String url, Properties connectionProps) throws SQLException {
    conn = DriverManager.getConnection(url, connectionProps);
}
/**
 * Query task execution logic.
 *
 * @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("Elapse Time: " + (endTs - startTs));
        System.out.println("Row count: " + cnt);
        try {
            Thread.sleep(160000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
/**
 * Close connection resource.
 */
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();
        }
    }
}
            

常見問題

Q:為什么已開通了公網(wǎng),且公網(wǎng)地址可以ping通,但JDBC連接失敗?

A:請執(zhí)行curl ipinfo.io/ip命令,查看公網(wǎng)IP地址,然后將該其添加到集群的IP白名單中。具體操作請參見設(shè)置白名單