本文介绍如何通过JDBC Driver连接使用云数据库Lindorm。

maven依赖

<dependency> 
  <groupId>com.aliyun.lindorm</groupId>  
  <artifactId>lindorm-all-client</artifactId>
  <version>2.0.7</version>
</dependency>

注意事项

服务端出于资源利用考虑,在连接空闲90s后,服务端会主动断开连接。如果此时复用该连接,则会出现com.aliyun.lindorm.client.shaded.org.apache.calcite.avatica.http.ConnectionDisconnectedException报错,重新建立连接即可解决。

获取连接串

  1. 登录Lindorm控制台
  2. 实例列表单击目标实例ID,进入实例详情页面。
  3. 单击数据库连接 > 时序引擎进入时序引擎页面。
  4. 时序引擎页面查看私网地址或公网地址。
    说明 默认情况下, 公网地址未开启,如果需要使用 公网地址,请单击 开通外网地址申请 公网地址。
    TSQL CLient连接-1

JDBC连接串参数

参数 说明
jdbc:lindorm:tsdb:url Lindorm连接地址。
lindorm.tsdb.driver.connect.timeout 连接服务端超时时间,单位ms,默认60000ms。
lindorm.tsdb.driver.socket.timeout socket读写间隔超时时间,单位ms,默认-1。

连接串示例如下:

jdbc:lindorm:tsdb:url=http://ld-xxxx-proxy-tsdb.lindorm.rds.aliyuncs.com:8242;lindorm.tsdb.driver.socket.timeout=30000;lindorm.tsdb.driver.connect.timeout=30000;

访问示例

        Connection conn = null;
        try {
            String url = "jdbc:lindorm:tsdb:url=http://ld-bp1p4wss7l2t5pa4w-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242";
            conn = DriverManager.getConnection(url);
            try (Statement stmt = conn.createStatement()) {
                stmt.execute("create table sensor (device_id VARCHAR TAG,region VARCHAR TAG,time BIGINT,temperature DOUBLE,humidity DOUBLE)");
                stmt.execute("insert into sensor (device_id, region, time, temperature, humidity) values('F07A1260','north-cn',1619076780000,12.1,45),('F07A1260','north-cn',1619076790000,13.2,47),('F07A1260','north-cn',1619076800000,10.6,46),('F07A1261','south-cn',1619076780000,18.1,44),('F07A1261','south-cn',1619076790000,19.7,44)");
                ResultSet rs = stmt.executeQuery("select region,time,temperature,humidity from sensor where time >= 1619076780000 and time <= 1619076800000");
                while (rs.next()) {
                    String region = rs.getString("region");
                    Long time = rs.getLong("time");
                    Double temperature = rs.getDouble("temperature");
                    Double humidity = rs.getDouble("humidity");
                    System.out.println("region=" + region + ",time=" + time + ",temperature" + temperature + ",humidity" + humidity);
                }
            } catch (RuntimeException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (RuntimeException e) {
            System.out.println("connection failed.");
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }