Conéctese a LindormTSDB desde una aplicación Java mediante el controlador JDBC de Lindorm. Este tutorial explica cómo instalar el controlador, establecer la conexión y ejecutar operaciones básicas de creación, inserción y consulta.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
JDK V1.8 o una versión posterior instalada.
La dirección IP de su cliente agregada a la lista de permitidos de la instancia de Lindorm; consulte Configure whitelists.
El endpoint de LindormTSDB; consulte View endpoints.
Paso 1: instalar el controlador
Elija uno de los siguientes métodos de instalación.
Descargar el archivo JAR manualmente
Descargue el paquete JAR lindorm-all-client desde Maven Central. Seleccione la versión que se ajuste a sus necesidades. Por ejemplo, para instalar la versión 2.1.5, descargue lindorm-all-client-2.1.5.jar y agréguelo al classpath de su proyecto.
Agregar la dependencia de Maven (recomendado)
Agregue la siguiente dependencia a su archivo pom.xml:
<dependency>
<groupId>com.aliyun.lindorm</groupId>
<artifactId>lindorm-all-client</artifactId>
<version>2.2.1.3</version>
</dependency>
Especifique la versión según sus necesidades.
Paso 2: conectarse a LindormTSDB
El formato de la URL JDBC para LindormTSDB es a continuación:
jdbc:lindorm:tsdb:url=http://<endpoint>:<port>
|
Parámetro |
Descripción |
Ejemplo |
|
|
El endpoint de LindormTSDB obtenido desde la consola de Lindorm. |
|
|
|
El puerto de LindormTSDB. |
|
Para consultar la lista completa de parámetros de la URL, consulte URL of the JDBC driver.
Paso 3: crear una tabla, insertar datos y ejecutar una consulta
En el siguiente ejemplo se establece una conexión a LindormTSDB, se crea una tabla de series temporales en la base de datos predeterminada, se insertan filas por lotes y se consultan los datos mediante un rango de tiempo.
import java.sql.*;
class Test {
public static void main(String[] args) {
// Replace with your LindormTSDB endpoint and port.
String url = "jdbc:lindorm:tsdb:url=http://ld-bp12pt80qr38p****-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242";
Connection conn = null;
try {
conn = DriverManager.getConnection(url);
try (Statement stmt = conn.createStatement()) {
// Create a time series table in the default database.
// device_id and region are TAG columns (dimensions for filtering).
stmt.execute("CREATE TABLE sensor1 (device_id VARCHAR TAG, region VARCHAR TAG, time TIMESTAMP, temperature DOUBLE, humidity DOUBLE, PRIMARY KEY(device_id))");
// Insert multiple rows in a single batch to reduce round trips.
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:00',12.1,45)");
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:10',13.2,47)");
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:20',10.6,46)");
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1261','south-cn','2021-04-22 15:33:00',18.1,44)");
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1261','south-cn','2021-04-22 15:33:10',19.7,44)");
stmt.executeBatch();
stmt.clearBatch();
}
// Always specify a time range to limit the amount of data scanned.
try (PreparedStatement pstmt = conn.prepareStatement(
"SELECT device_id, region, time, temperature, humidity FROM sensor1 WHERE time >= ? AND time <= ?")) {
pstmt.setTimestamp(1, Timestamp.valueOf("2021-04-22 15:33:00"));
pstmt.setTimestamp(2, Timestamp.valueOf("2021-04-22 15:33:20"));
try (ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
String device_id = rs.getString("device_id");
String region = rs.getString("region");
Timestamp time = rs.getTimestamp("time");
Double temperature = rs.getDouble("temperature");
Double humidity = rs.getDouble("humidity");
System.out.printf("%s %s %s %f %f\n", device_id, region, time, temperature, humidity);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Si la consulta se ejecuta correctamente, la salida será similar a a continuación:
F07A1261 south-cn 2021-04-22 15:33:00.0 18.100000 44.000000
F07A1261 south-cn 2021-04-22 15:33:10.0 19.700000 44.000000
F07A1260 north-cn 2021-04-22 15:33:00.0 12.100000 45.000000
F07A1260 north-cn 2021-04-22 15:33:10.0 13.200000 47.000000
F07A1260 north-cn 2021-04-22 15:33:20.0 10.600000 46.000000
Mapeo de tipos de datos
Los tipos SQL de LindormTSDB corresponden a los tipos de Java de a continuación:
|
Tipo de LindormTSDB |
Tipo de Java |
Método getter de JDBC |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Solución de problemas
Error de conexión
Compruebe que la IP de su cliente esté incluida en la lista de permitidos de la instancia.
Confirme que el endpoint y el puerto sean correctos en la URL JDBC.
Compruebe que la instancia de Lindorm se esté ejecutando y que el motor de series temporales esté habilitado.
La consulta no devuelve datos
Confirme que el rango de tiempo de la cláusula
WHEREcoincida con las marcas de tiempo de los datos insertados.Compruebe que el nombre de la tabla y los nombres de las columnas sean correctos.
**executeBatch() es lento**
Ajuste el tamaño del lote según su carga de trabajo y el volumen de datos.
Pasos siguientes
URL of the JDBC driver: lista completa de los parámetros de la URL JDBC.
Supported API operations and methods: cobertura de la API JDBC para LindormTSDB.
SQL reference: sintaxis SQL completa de LindormTSDB.