文档文档

InfluxDB 3 的 Java 客户端库

InfluxDB 3 的 influxdb3-java Java 客户端库 可与 Java 应用程序代码集成,以写入和查询存储在 InfluxDB 3 Core 中的数据。

InfluxDB 客户端库提供可配置的批量写入数据到 InfluxDB 3 Core 的功能。使用客户端库构建行协议数据、将其他格式的数据转换为行协议,以及批量写入行协议数据到 InfluxDB HTTP API。

InfluxDB 3 客户端库可以使用 SQL 或 InfluxQL 查询 InfluxDB 3 Core。influxdb3-java Java 客户端库封装了 Apache Arrow 的 org.apache.arrow.flight.FlightClient,提供了一个方便的 InfluxDB 3 接口,用于执行 SQL 和 InfluxQL 查询、请求服务器元数据以及使用 gRPC 和 Flight 协议从 InfluxDB 3 Core 检索数据。

示例:写入和查询数据

以下示例展示了如何使用 influxdb3-java 来写入和查询存储在 InfluxDB 3 Core 中的数据。

package com.influxdata.demo;

import com.influxdb.v3.client.InfluxDBClient;
import com.influxdb.v3.client.Point;
import com.influxdb.v3.client.query.QueryOptions;
import com.influxdb.v3.client.query.QueryType;

import java.time.Instant;
import java.util.stream.Stream;

public class HelloInfluxDB {
  private static final String HOST_URL = "https://:8181"; // your cluster URL
  private static final String DATABASE = "DATABASE_NAME"; // your InfluxDB database name 
  private static final char[] TOKEN = System.getenv("DATABASE_TOKEN"); // a local environment variable that stores your database token

  // Create a client instance that writes and queries data in your database.
  public static void main(String[] args) {
    // Instantiate the client with your InfluxDB credentials
    try (InfluxDBClient client = InfluxDBClient.getInstance(HOST_URL, TOKEN, DATABASE)) {
      writeData(client);
      queryData(client);
    }
    catch (Exception e) {
      System.err.println("An error occurred while connecting to InfluxDB!");
      e.printStackTrace();
    }
  }

  // Use the Point class to construct time series data.
  private static void writeData(InfluxDBClient client) {
    Point point = Point.measurement("temperature")
                       .setTag("location", "London")
                       .setField("value", 30.01)
                       .setTimestamp(Instant.now().minusSeconds(10));
    try {
      client.writePoint(point);
      System.out.println("Data is written to the database.");
    }
    catch (Exception e) {
      System.err.println("Failed to write data to the database.");
      e.printStackTrace();
    }
  }

  // Use SQL to query the most recent 10 measurements
  private static void queryData(InfluxDBClient client) {
    System.out.printf("--------------------------------------------------------%n");
    System.out.printf("| %-8s | %-8s | %-30s |%n", "location", "value", "time");
    System.out.printf("--------------------------------------------------------%n");

    String sql = "select time,location,value from temperature order by time desc limit 10";
    try (Stream<Object[]> stream = client.query(sql)) {
      stream.forEach(row -> System.out.printf("| %-8s | %-8s | %-30s |%n", row[1], row[2], row[0]));
    }
    catch (Exception e) {
      System.err.println("Failed to query data from the database.");
      e.printStackTrace();
    }
  }
}

来源:GitHub 上的 suyashcjoshi/SimpleJavaInfluxDB

替换以下内容:

  • DATABASE_NAME:您的 InfluxDB 3 Core 数据库的名称,用于读写数据
  • DATABASE_TOKEN:一个本地环境变量,用于存储您的 令牌——该令牌必须对指定的数据库具有读写权限。

运行示例以写入和查询数据

  1. 构建项目的可执行 JAR——例如,使用 Maven

    mvn package
  2. 在终端中,运行 java 命令以写入和查询数据库中的数据

    java \
    --add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED \
    -jar target/PROJECT_NAME.jar

    在命令中包含以下内容

输出的是您 InfluxDB 3 Core 数据库中新写入的数据。

安装

在您的项目中包含 com.influxdb.influxdb3-java 依赖项。

<dependency>
  <groupId>com.influxdb</groupId>
  <artifactId>influxdb3-java</artifactId>
  <version>RELEASE</version>
</dependency>
dependencies {

   implementation group: 'com.influxdb', name: 'influxdb3-java', version: 'latest.release'

}

导入客户端

influxdb3-java 客户端库包提供了 com.influxdb.v3.client 类,用于构建、写入和查询存储在 InfluxDB 3 Core 中的数据。

API 参考

InfluxDBClient 接口

InfluxDBClient 提供了一个与 InfluxDB API 交互以写入和查询数据的接口。

InfluxDBClient.getInstance 构造函数初始化并返回一个客户端实例,该实例具有以下功能:

  • 一个配置为写入数据库的写入客户端
  • 一个配置为查询数据库的 ArrowFlight 客户端

要初始化客户端,请调用 getInstance 并将您的凭证作为以下类型之一传递:

使用凭证参数初始化

static InfluxDBClient getInstance(@Nonnull final String host,
                           @Nullable final char[] token,
                           @Nullable final String database)
  • host(字符串):InfluxDB 实例的主机 URL。
  • database(字符串):用于写入和查询的数据库
  • token(字符数组):一个具有指定数据库读/写权限的数据库令牌

示例:使用凭证参数初始化

package com.influxdata.demo;

import com.influxdb.v3.client.InfluxDBClient;
import com.influxdb.v3.client.Point;
import com.influxdb.v3.client.query.QueryOptions;
import com.influxdb.v3.client.query.QueryType;

import java.time.Instant;
import java.util.stream.Stream;

public class HelloInfluxDB {
  private static final String HOST_URL = "https://:8181";
  private static final String DATABASE = "DATABASE_NAME";
  private static final char[] TOKEN = System.getenv("DATABASE_TOKEN");

  // Create a client instance, and then write and query data in InfluxDB.
  public static void main(String[] args) {
    try (InfluxDBClient client = InfluxDBClient.getInstance(HOST_URL, DATABASE_TOKEN, DATABASE)) {
      writeData(client);
      queryData(client);
    }
    catch (Exception e) {
      System.err.println("An error occurred while connecting to InfluxDB!");
      e.printStackTrace();
    }
  }
}

替换以下内容:

  • DATABASE_NAME:您的 InfluxDB 3 Core 数据库
  • DATABASE_TOKEN:一个对指定数据库具有必要权限的数据库令牌

默认标签

要在所有写入的数据中包含默认标签,请传递一个标签键值对的 Map

InfluxDBClient getInstance(@Nonnull final String host,
                                      @Nullable final char[] token,
                                      @Nullable final String database,
                                      @Nullable Map<String, String> defaultTags)

使用数据库连接字符串初始化

"https://:8181"
+ "?token=DATABASE_TOKEN&amp;database=DATABASE_NAME"

替换以下内容:

  • DATABASE_NAME:您的 InfluxDB 3 Core 数据库
  • DATABASE_TOKEN:一个对指定数据库具有必要权限的数据库令牌

InfluxDBClient 实例方法

InfluxDBClient.writePoint

将点作为行协议写入数据库

  1. 初始化 client——您的令牌必须对指定的数据库具有写入权限。
  2. 使用 com.influxdb.v3.client.Point 类创建时间序列数据。
  3. 调用 client.writePoint() 方法将点作为行协议写入您的数据库。
  // Use the Point class to construct time series data.
  // Call client.writePoint to write the point in your database.
  private static void writeData(InfluxDBClient client) {
    Point point = Point.measurement("temperature")
                       .setTag("location", "London")
                       .setField("value", 30.01)
                       .setTimestamp(Instant.now().minusSeconds(10));
    try {
      client.writePoint(point);
      System.out.println("Data written to the database.");
    }
    catch (Exception e) {
      System.err.println("Failed to write data to the database.");
      e.printStackTrace();
    }
  }

InfluxDBClient.query

查询数据并处理结果

  1. 初始化 client——令牌必须对您要查询的数据库具有读取权限。
  2. 调用 client.query() 并将您的 SQL 查询作为字符串提供。
  3. 使用结果流的内置迭代器来处理行数据。
  // Query the latest 10 measurements using SQL
  private static void queryData(InfluxDBClient client) {
    System.out.printf("--------------------------------------------------------%n");
    System.out.printf("| %-8s | %-8s | %-30s |%n", "location", "value", "time");
    System.out.printf("--------------------------------------------------------%n");

    String sql = "select time,location,value from temperature order by time desc limit 10";
    try (Stream<Object[]> stream = client.query(sql)) {
      stream.forEach(row -> System.out.printf("| %-8s | %-8s | %-30s |%n", row[1], row[2], row[0]));
    }
    catch (Exception e) {
      System.err.println("Failed to query data from the database.");
      e.printStackTrace();
    }
  }

查看 InfluxDB 3 Java 客户端库


此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2