このトピックでは、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();
}
}
}