すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:Java

最終更新日:Jun 07, 2024

このトピックでは、MySQL Java Database Connectivity (JDBC) を使用してAnalyticDB for MySQLクラスターに接続する方法について説明します。

サポートされているMySQL JDBCドライバーのバージョン

AnalyticDB for MySQLは、次のMySQL JDBCドライバーバージョンをサポートしています。

  • 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.22、5.1.23、5.1.32、5.34、5.28、5.1.33、5.。

  • 8.0シリーズ。

使用上の注意

  • MySQL JDBCドライバを使用して接続を確立するには、ドライバのパッケージ (mysql-connector-java-x.x.x.jar) をCLASSPATHに手動で追加する必要があります。 そうでなければ、接続を確立することができない。

  • マルチステートメント機能を使用して複数のSQLステートメントを連続して実行する場合は、SET ADB_CONFIG ALLOW_MULTI_QUERIES=true; ステートメントを実行してマルチステートメント機能を有効にし、allowMultiQueriesプロパティをtrueに設定します。

    説明

    V3.1.9.3以降のAnalyticDB for MySQLクラスターのみがマルチステートメント機能をサポートしています。

再試行なしでMySQL JDBC接続を確立するためのサンプルコード

MySQL JDBCドライバーを使用してAnalyticDB for MySQLクラスターに接続するには、ビジネスシステムのJavaコードに次のサンプルコードを追加します。

接続接続=null;
ステートメントステートメント=null;
ResultSet rs = null;
try {
    Class.forName("com.mysql.jdbc.Driver");
    // adb_url: 接続先のAnalyticDB for MySQLクラスターのエンドポイント。 エンドポイントは、AnalyticDB for MySQLコンソールの [クラスター情報] ページで取得できます。 デフォルトのポート番号は、3306 です。 
    // db_name: AnalyticDB for MySQLクラスター内のデータベースの名前。 
    文字列url = "jdbc:mysql:// adb_url:3306/db_name?useUnicode=true&characterEncoding=UTF-8";
    Properties connectionProps = new Properties();
    // account_name: AnalyticDB for MySQLクラスターへの接続に使用されるアカウント。 アカウントは、特権アカウントまたは標準アカウントにすることができます。 
    connectionProps.put("user", "account_name");
    // account_password: AnalyticDB for MySQLクラスターへの接続に使用されるアカウントのパスワード。 
    connectionProps.put("password" 、"account_password");
    connection = DriverManager.getConnection(url, connectionProps);
    statement = connection.createStatement();
    文字列クエリ="information_schema.tablesからカウント (*) を選択";
    rs = statement.exe cuteQuery (クエリ);
    while (rs.next()) {
        System.out.println(rs.getObject (1));
    }
} catch (ClassNotFoundException e) {
    e.printStackTrace();
} catch (SQLException e) {
    e.printStackTrace();
} catch (例外e) {
    e.printStackTrace();
} finally {
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (文!= null) {
        try {
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (connection != null) {
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
            

再試行でMySQL JDBC接続を確立するためのサンプルコード

MySQL JDBC接続を確立すると、次のパラメーターを設定して接続の再試行を実装できます。

public static final int MAX_QUERY_RETRY_TIMES = 3;
パブリック静的接続conn = null;
public static Statementステートメント=null;
public static ResultSet rs = null;
public static void main(String[] args) throws ClassNotFoundException {
    // db_name: AnalyticDB for MySQLクラスター内のデータベースの名前。 
    文字列yourDB = "db_name";  
    // account_name: AnalyticDB for MySQLクラスターへの接続に使用されるアカウント。 アカウントは、特権アカウントまたは標準アカウントにすることができます。 
    文字列username = "account_name";  
    // account_password: AnalyticDB for MySQLクラスターへの接続に使用されるアカウントのパスワード。 
    文字列password = "account_password"; 
    Class.forName("com.mysql.jdbc.Driver");
    // adb_url: 接続先のAnalyticDB for MySQLクラスターのエンドポイント。 エンドポイントは、AnalyticDB for MySQLコンソールの [クラスター情報] ページで取得できます。 デフォルトのポート番号は、3306 です。 
    文字列url = "jdbc:mysql:// adb_url:3306/" + yourDB + "?useUnicode=true&characterEncoding=UTF-8";
    Properties connectionProps = new Properties();
    connectionProps.put("user" 、ユーザー名);
    connectionProps.put("パスワード" 、パスワード);
    文字列クエリ="select id from test4dmp.test limit 10";
    int retryTimes = 0;
    // ループを使用して自動再試行を実行します。 
    while (retryTimes < MAX_QUERY_RETRY_TIMES) {
        try {
            getConn(url、connectionProps);
            execQuery(query);// クエリを実行します。 
            break; // クエリが実行されている場合は、ループを終了します。 
        } catch (SQLException e) {
            System.out.println("Met SQL例外:" + e.getMessage() + "、次にタスクの再試行に進みます...");
            try {
                if (conn == null | | conn.isClosed()) {
                    retryTimes ++;
                }
            } catch (SQLException e1) {
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e2) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    // 接続リソースをクリアします。
    closeResource();
}
/**
 * 接続を取得します。
 *
 * @ param url
 * @ param connectionProps
 * @ SQLExceptionをスロー
 * /
public static void getConn(String url, Properties connectionProps) throws SQLException {
    conn = DriverManager.getConnection(url、connectionProps);
}
/**
 * クエリタスク実行ロジック。
 *
 * @ param sql
 * @ 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.exe cuteQuery(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("行数:" + cnt);
        try {
            Thread.sleep(160000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
/**
 * 接続リソースを閉じます。
 * /
public static void closeResource() {
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (文!= null) {
        try {
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (conn != null) {
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}