8.1 业务系统连接分析型数据库并进行查询
使用jdbc odbc php python R-Mysql等连接分析型数据库的例子和注意事项介绍,以及流控、retry链接、异常处理等方法。
分析型数据库集群系统部署在阿里云环境中,用户在部署业务应用系统时,尽可能保证业务系统与阿里云环境的网络联通性,如购买阿里云ECS主机(
https://www.aliyun.com/product/ecs/)作为业务系统的服务器。
JDBC直接连接分析型数据库
最简单直接的连接并访问分析型数据库的方式是通过JDBC,分析型数据库支持MySQL自带的客户端以及大部分版本的mysql-jdbc驱动。
支持的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.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
- 5.4系列
- 5.5系列
Java程序中,将合适的mysql-jdbc驱动包(mysql-connector-java-x.x.x.jar)加入CLASSPATH中,通过以下示例程序就能连接并访问分析型数据库。通过该JDBC方式直连分析型数据库时,和直连MySQL类似,需注意在使用完连接并不准备进行复用的情况下,需要释放连接资源。用户根据具体情况,设置${user_db},${url},${my_access_key_id},${my_access_key_secret}和${query}值。
不带重试的JDBC样例程序片段
- Connection connection = null;
- Statement statement = null;
- ResultSet rs = null;
- try {
- Class.forName("com.mysql.jdbc.Driver");
- String url = "jdbc:mysql://mydbname.ads-hz.aliyuncs.com:5544/my_ads_db?useUnicode=true&characterEncoding=UTF-8";
- Properties connectionProps = new Properties();
- connectionProps.put("user", "my_access_key_id");
- connectionProps.put("password", "my_access_key_secret");
- 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样例程序片段
- 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 = "user_db";
- String username = "my_access_key_id";
- String password = "my_access_key_secret";
- Class.forName("com.mysql.jdbc.Driver");
- String url = "jdbc:mysql://mydbname.ads-hz.aliyuncs.com:5544/" + 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;
- while (retryTimes < MAX_QUERY_RETRY_TIMES) {
- try {
- getConn(url, connectionProps);
- execQuery(query);
- break; // Query execution successfully, break out.
- } catch (SQLException