---
title: Java client library for InfluxDB 3
description: The InfluxDB 3 influxdb3-java Java client library integrates with application code to write and query data stored in an InfluxDB Core database.
url: https://docs.influxdata.com/influxdb3/enterprise/reference/client-libraries/v3/java/
estimated_tokens: 3066
product: InfluxDB 3 Enterprise
version: enterprise
publisher: InfluxData
canonical: https://docs.influxdata.com/influxdb3/enterprise/reference/client-libraries/v3/java/
date: '2026-05-07T15:42:44-05:00'
lastmod: '2026-05-07T15:42:44-05:00'
---

The InfluxDB 3 [`influxdb3-java` Java client library](https://github.com/InfluxCommunity/influxdb3-java) integrates
with Java application code to write and query data stored in InfluxDB 3 Enterprise.

**Latest version:**[v1.10.0](/influxdb3/enterprise/reference/client-libraries/v3/java/release-notes/)(2026-06-11)

InfluxDB client libraries provide configurable batch writing of data to InfluxDB 3 Enterprise.
Use client libraries to construct line protocol data, transform data from other formats
to line protocol, and batch write line protocol data to InfluxDB HTTP APIs.

InfluxDB 3 client libraries can query InfluxDB 3 Enterprise using SQL or InfluxQL.
The `influxdb3-java` Java client library wraps the Apache Arrow `org.apache.arrow.flight.FlightClient`in a convenient InfluxDB 3 interface for executing SQL and InfluxQL queries, requesting
server metadata, and retrieving data from InfluxDB 3 Enterprise using the Flight protocol with gRPC.

* [Installation](#installation)
  * [Using Maven](#using-maven)
  * [Using Gradle](#using-gradle)

* [Importing the client](#importing-the-client)
* [API reference](#api-reference)
* [Classes](#classes)
* [InfluxDBClient interface](#influxdbclient-interface)
  * [Initialize with credential parameters](#initialize-with-credential-parameters)
  * [InfluxDBClient instance methods](#influxdbclient-instance-methods)
  * [InfluxDBClient.writePoint](#influxdbclientwritepoint)
  * [InfluxDBClient.query](#influxdbclientquery)

#### Example: write and query data

The following example shows how to use `influxdb3-java` to write and query data stored in InfluxDB 3 Enterprise.

```
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://localhost: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();
    }
  }
}
```

Source: [suyashcjoshi/SimpleJavaInfluxDB](https://github.com/suyashcjoshi/SimpleJavaInfluxDB/) on GitHub

Replace the following:

* `DATABASE_NAME`:
  the name of your InfluxDB 3 Enterprise[database](/influxdb3/enterprise/admin/databases/) to read and write data to
* `DATABASE_TOKEN`: a
  local environment variable that stores your[token](/influxdb3/enterprise/admin/tokens/database/)–the token must have
  read and write permissions on the specified database.

### Run the example to write and query data

1. Build an executable JAR for the project–for example, using Maven:

   ```
   mvn package
   ```

2. In your terminal, run the `java` command to write and query data in your database:

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

   Include the following in your command:

   * [`--add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED`](https://arrow.apache.org/docs/java/install.html#id3): with Java version 9 or later and Apache Arrow version 16 or later, exposes JDK internals for Arrow.
     For more options, see the [Apache Arrow Java install documentation](https://arrow.apache.org/docs/java/install.html).
   * `-jar target/PROJECT_NAME.jar`: your `.jar` file to run.

The output is the newly written data from your InfluxDB 3 Enterprise database.

## Installation

Include `com.influxdb.influxdb3-java` in your project dependencies.

#### Maven pom.xml ####

```xml
<dependency>
  <groupId>com.influxdb</groupId>
  <artifactId>influxdb3-java</artifactId>
  <version>RELEASE</version>
</dependency>
```

```groovy
dependencies {

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

}
```

## Importing the client

The `influxdb3-java` client library package provides`com.influxdb.v3.client` classes for constructing, writing, and querying data
stored in InfluxDB 3 Enterprise.

## API reference

* [Interface InfluxDBClient](#interface-influxdbclient)
  * [Initialize with credential parameters](#initialize-with-credential-parameters)
  * [InfluxDBClient instance methods](#influxdbclient-instance-methods)
  * [InfluxDBClient.writePoint](#influxdbclientwritepoint)
  * [InfluxDBClient.query](#influxdbclientquery)

## InfluxDBClient interface

`InfluxDBClient` provides an interface for interacting with InfluxDB APIs for writing and querying data.

The `InfluxDBClient.getInstance` constructor initializes and returns a client instance with the following:

* A *write client* configured for writing to the database.
* An Arrow *Flight client* configured for querying the database.

To initialize a client, call `getInstance` and pass your credentials as one of
the following types:

* [parameters](#initialize-with-credential-parameters)
* a [`ClientConfig`](https://github.com/InfluxCommunity/influxdb3-java/blob/main/src/main/java/com/influxdb/v3/client/config/ClientConfig.java)
* a [database connection string](#initialize-using-a-database-connection-string)

### Initialize with credential parameters

```java
static InfluxDBClient getInstance(@Nonnull final String host,
                           @Nullable final char[] token,
                           @Nullable final String database)
```

* `host` (string): The host URL of the InfluxDB instance.
* `database` (string): The [database](/influxdb3/enterprise/admin/databases/) to use for writing and querying.
* `token` (char array): A [database token](/influxdb3/enterprise/admin/tokens/database/) with read/write permissions.

#### Example: initialize with credential parameters

```java
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://localhost: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();
    }
  }
}
```

Replace the following:

* `DATABASE_NAME`:
  your InfluxDB 3 Enterprise [database](/influxdb3/enterprise/admin/databases/)
* `DATABASE_TOKEN`: a[database token](/influxdb3/enterprise/admin/tokens/database/) that has
  the necessary permissions on the specified database.

#### Default tags

To include default [tags](/influxdb3/enterprise/reference/glossary/#tag) in
all written data, pass a `Map` of tag keys and values.

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

### Initialize using a database connection string

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

Replace the following:

* `DATABASE_NAME`:
  your InfluxDB 3 Enterprise [database](/influxdb3/enterprise/admin/databases/)
* `DATABASE_TOKEN`: a[database token](/influxdb3/enterprise/admin/tokens/database/) that has
  the necessary permissions on the specified database.

### InfluxDBClient instance methods

#### InfluxDBClient.writePoint

To write points as line protocol to a database:

1. [Initialize the `client`](#initialize-with-credential-parameters)–your
   token must have write permission on the specified database.
2. Use the `com.influxdb.v3.client.Point` class to create time series data.
3. Call the `client.writePoint()` method to write points as line protocol in your
   database.

```
  // 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

To query data and process the results:

1. [Initialize the `client`](#initialize-with-credential-parameters)–the
   token must have read permission on the database you want to query.
2. Call `client.query()` and provide your SQL query as a string.
3. Use the result stream’s built-in iterator to process row data.

```
  // 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();
    }
  }
```

[View the InfluxDB 3 Java client library](https://github.com/InfluxCommunity/influxdb3-java/)

[Flight client](/influxdb3/enterprise/tags/flight-client/)[Java](/influxdb3/enterprise/tags/java/)[gRPC](/influxdb3/enterprise/tags/grpc/)[SQL](/influxdb3/enterprise/tags/sql/)[Flight SQL](/influxdb3/enterprise/tags/flight-sql/)[client libraries](/influxdb3/enterprise/tags/client-libraries/)
