Todos os produtos
Search
Central de documentação

Lindorm:Guia do desenvolvedor do Java JDBC Driver

Última atualização: Jun 28, 2026

Utilize o Lindorm JDBC Driver para se conectar e acessar o LindormTSDB. Este guia também aborda as operações de API e os métodos suportados.

Informações básicas

O JDBC Driver para LindormTSDB implementa interfaces definidas na especificação JDBC 4.1. Por ser um banco de dados de séries temporais, o LindormTSDB suporta um subconjunto dos recursos básicos definidos no JDBC 1.0.

Pré-requisitos

  • Java instalado. É necessário o Java Development Kit (JDK) 1.8 ou superior.

  • Endereço IP do cliente adicionado à lista de permissões do Lindorm. Para mais informações, consulte Defina uma lista de permissões.

  • Endereço de conexão do Lindorm TSDB obtido. Para mais informações, consulte Visualize endpoints.

Procedimento

  1. Instale a dependência do Lindorm JDBC Driver de uma das seguintes formas.

    • Instalação manual.

      Para integrar o JDBC Driver localmente, baixe o pacote JAR em Lindorm-all-client. Selecione a versão desejada. Por exemplo, para instalar a versão 2.1.2, baixe o pacote lindorm-all-client-2.1.2.jar.

    • Baixe via Maven.

      Para integrar o JDBC Driver em um projeto Maven, crie um projeto e adicione a seguinte dependência ao arquivo pom.xml:

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

      Defina o número da versão do lindorm-all-client conforme a versão necessária.

  2. Acesse o LindormTSDB. Para um exemplo de código completo, consulte Exemplo de acesso.

    1. Estabeleça uma conexão com o LindormTSDB.

      String url = "jdbc:lindorm:tsdb:url=http://<host:port>";
      Connection conn = DriverManager.getConnection(url);
      Nota
      • host:port: Endereço de conexão e porta do LindormTSDB. Exemplo: ld-bp17j28j2y7pm****-proxy-tsdb.lindorm.rds.aliyuncs.com:8242.

      • jdbc:lindorm:tsdb:url=http://<host:port>: Endereço de conexão JDBC. Para mais detalhes sobre a sintaxe e os parâmetros de conexão, consulte Detalhes do endereço de conexão JDBC.

    2. Crie um banco de dados e uma tabela no LindormTSDB.

      Statement stmt = conn.createStatement();
      
      stmt.execute("CREATE DATABASE test");
      stmt.execute("USE test");
      stmt.execute("CREATE TABLE sensor (device_id VARCHAR TAG,region VARCHAR TAG,time TIMESTAMP,temperature DOUBLE,humidity DOUBLE,PRIMARY KEY(device_id))");
    3. Insira dados na tabela sensor.

      // Use PreparedStatement to write data in batches. This method is recommended.
      PreparedStatement pstmt = conn.prepareStatement("INSERT INTO sensor (device_id, region, time, temperature, humidity) VALUES (?, ?, ?, ?, ?)");
      int batchSize = 100;
      long ts = System.currentTimeMillis();
      
      for (int i = 0; i < batchSize; i++) {
      
           // Bind parameters sequentially according to the column order in the INSERT statement.
           pstmt.setString(1, "F07A1260");
           pstmt.setString(2, "north-cn");
           pstmt.setLong(3, ts + i * 10000);
           pstmt.setDouble(4, 12.1);
           pstmt.setLong(5, 45);
      
           pstmt.addBatch();
      }
      
      pstmt.executeBatch();
      pstmt.clearBatch();
      
      // Write data in batches. 
      Statement stmt = conn.createStatement();
      stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1260','north-cn',1619076780000,12.1,45)");
      stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1260','north-cn',1619076790000,13.2,47)");
      stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1260','north-cn',1619076800000,10.6,46)");
      stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1261','south-cn',1619076780000,18.1,44)");
      stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1261','south-cn',1619076790000,19.7,44)");
      stmt.executeBatch();
      stmt.clearBatch();
      
      // Write a single data entry. This method is not recommended.
      Statement stmt = conn.createStatement();
      stmt.execute("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1260','north-cn',1619076780000,12.1,45)");
    4. Consulte dados na tabela sensor.

      ResultSet rs = stmt.executeQuery("select device_id, region,time,temperature,humidity from sensor where time >= 1619076780000 and time <= 1619076800000");
      
      while (rs.next()) {
          String device_id = rs.getString("device_id");
          String region = rs.getString("region");
          Long time = rs.getLong("time");
          Double temperature = rs.getDouble("temperature");
          Long humidity = rs.getLong("humidity");
          System.out.printf("%s %s %d %f %d\n", device_id, region, time, temperature, humidity);
      }

Operações de API e métodos suportados

A tabela a seguir lista as operações de API e os métodos suportados pelo JDBC Driver para LindormTSDB.

Nota

Operações de API não listadas na tabela abaixo possuem compatibilidade parcial com frameworks de nível superior e retornam valores padrão. Em caso de dúvidas adicionais, envie um ticket.

Interface

Métodos suportados

Connection

  • close()

  • createStatement(int, int)

  • createStatement(int, int, int)

  • getSchema()

  • prepareStatement(String, int, int)

  • prepareStatement(String, int, int, int)

  • setSchema(String)

Nota

A implementação da interface Connection do Lindorm JDBC Driver não é thread-safe. Não compartilhe o mesmo objeto Connection entre múltiplas threads.

Statement

  • addBatch(String)

  • close()

  • execute(String)

  • executeQuery(String)

  • getMoreResult

  • isClosed()

  • setFetchSize(int)

ResultSet

  • addBatch()

  • clearBatch()

  • close()

  • execute()

  • executeBatch()

  • executeQuery()

  • getParameterNumber()

  • setNull(int)

  • setXXX(int, T)

    Nota

    Para mais informações sobre os tipos de dados suportados pelo LindormTSDB, consulte Tipos de dados.

PreparedStatement

  • close()

  • getStatement()

  • next()

  • wasNull()

  • getXXX(int)

    Nota

    Para mais informações sobre os tipos de dados suportados pelo LindormTSDB, consulte Tipos de dados.

Detalhes do endereço de conexão JDBC

O endereço de conexão JDBC define o protocolo e os parâmetros para conexão com o LindormTSDB.

A sintaxe do endereço de conexão JDBC é a seguinte:

jdbc:lindorm:tsdb:url=http://${host:port}[;${connection_parameter}=${connection_value}]...
Nota

host:port: Endereço de conexão e porta do LindormTSDB. Exemplo: ld-bp17j28j2y7pm****-proxy-tsdb.lindorm.rds.aliyuncs.com:8242.

A tabela a seguir descreve os parâmetros de conexão suportados:

Parâmetro

Descrição

user

Nome de usuário para autenticação na instância do Lindorm.

Nota

Caso a autenticação de usuário não esteja ativada no mecanismo, não é necessário especificar um nome de usuário.

password

Senha para autenticação na instância do Lindorm. Se você esquecer a senha, altere-a no sistema de gerenciamento de cluster do LindormTable. Para mais informações, consulte Alterar senha de usuário.

Nota

Caso a autenticação de usuário não esteja ativada no mecanismo, não é necessário especificar uma senha.

database

Banco de dados a ser acessado. Se este parâmetro não for especificado, o banco de dados default será acessado.

lindorm.tsdb.driver.connect.timeout

Tempo limite para conexão com o servidor LindormTSDB, em milissegundos (ms). O valor padrão é 60 segundos (60.000 ms).

lindorm.tsdb.driver.socket.timeout

Tempo limite para intervalos de leitura e escrita do socket, em milissegundos (ms). O valor padrão é -1, indicando ausência de tempo limite.

Importante

Para otimizar a utilização de recursos, o servidor desconecta ativamente a conexão caso o cliente Lindorm permaneça ocioso por 60 minutos. Ao tentar reutilizar essa conexão, ocorrerá o erro com.aliyun.lindorm.client.shaded.org.apache.calcite.avatica.http.ConnectionDisconnectedException. Para resolver esse problema, restabeleça a conexão.

Uso do pool de conexões Druid para acessar o LindormTSDB

Aplicações Java que acessam o LindormTSDB via JDBC Driver criam um objeto Connection para cada conexão, o que gera uma sobrecarga significativa. Um pool de conexões reduz essa sobrecarga ao reutilizar conexões existentes.

Os passos a seguir descrevem como utilizar o pool de conexões Alibaba Druid.

  1. Adicione a dependência do pool de conexões Druid ao arquivo pom.xml do seu projeto Maven:

    <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.2.6</version>
        </dependency>
  2. Adicione a dependência do Lindorm JDBC Driver ao seu projeto Maven. Para mais informações, consulte a Etapa 1 em Procedimento.

  3. Execute o código abaixo para criar um objeto DataSource e definir o endereço de conexão JDBC do LindormTSDB para o DataSource.

    dataSource = new DruidDataSource();
            try {
                dataSource.setDriver(DriverManager.getDriver("jdbc:lindorm:tsdb:url=http://<host:port>"));
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
    Nota

    host:port: Endereço de conexão e porta do LindormTSDB. Exemplo: ld-bp17j28j2y7pm****-proxy-tsdb.lindorm.rds.aliyuncs.com:8242.

  4. Crie uma Connection JDBC a partir do DataSource e acesse o LindormTSDB. O código completo é apresentado a seguir:

    import com.alibaba.druid.pool.DruidDataSource;
    import java.sql.*;
    
    public class App {
        private DruidDataSource dataSource;
    
        public void setUp() {
            dataSource = new DruidDataSource();
            try {
                dataSource.setDriver(DriverManager.getDriver("jdbc:lindorm:tsdb:url=http://ld-bp17j28j2y7pm****-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242"));
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            dataSource.setUrl("jdbc:lindorm:tsdb:url=http://ld-bp17j28j2y7pm****-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242");
            dataSource.setValidationQuery("select 1");
            dataSource.setMaxActive(1);
            dataSource.setUsername("username");
            dataSource.setPassword("****");
            dataSource.setKeepAlive(true);
            dataSource.setMinEvictableIdleTimeMillis(80);
            dataSource.setMaxWait(10000);
            dataSource.init();
    
        }
    
        public void close() {
            dataSource.close();
        }
    
        public void testQuery() {
            try (Connection conn = this.dataSource.getConnection()) {
                try (Statement stmt = conn.createStatement()) {
                    ResultSet rs = stmt.executeQuery("select * from sensor");
                    long count = 0;
                    while (rs.next()) {
                        count++;
                    }
                    System.out.println("count=" + count + " ");
                } 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();
            }
        }
    
        public static void main( String[] args ) {
            App app = new App();
            app.setUp();
            app.testQuery();
            app.close();
        }
    }