---
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/core/reference/client-libraries/v3/java/
estimated_tokens: 12059
product: InfluxDB 3 Core
version: core
---

# Java client library for InfluxDB 3

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 Core.

**Latest version:** [v1.9.0](/influxdb3/core/reference/client-libraries/v3/java/release-notes/) (2026-04-23)

InfluxDB client libraries provide configurable batch writing of data to InfluxDB 3 Core. 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 Core 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 Core 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 Core.

```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"; // 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 Core [database](/influxdb3/core/admin/databases/) to read and write data to
-   `DATABASE_TOKEN`: a local environment variable that stores your [token](/influxdb3/core/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:
    
    ```bash
    mvn package
    ```
    
2. In your terminal, run the `java` command to write and query data in your database:
    
    ```bash
    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 Core database.

## Installation

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

<!-- Tabbed content: Select one of the following options -->

**Maven pom.xml:**

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

**Gradle dependency script:**

```groovy
dependencies {

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

}
```

<!-- End tabbed content -->

## 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 Core.

## 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/core/admin/databases/) to use for writing and querying.
-   `token` (char array): A [database token](/influxdb3/core/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 Core [database](/influxdb3/core/admin/databases/)
-   `DATABASE_TOKEN`: a [database token](/influxdb3/core/admin/tokens/database/) that has the necessary permissions on the specified database.

#### Default tags

To include default [tags](/influxdb3/core/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 Core [database](/influxdb3/core/admin/databases/)
-   `DATABASE_TOKEN`: a [database token](/influxdb3/core/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.

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

```java
  // 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/core/tags/flight-client/) [Java](/influxdb3/core/tags/java/) [gRPC](/influxdb3/core/tags/grpc/) [SQL](/influxdb3/core/tags/sql/) [Flight SQL](/influxdb3/core/tags/flight-sql/) [client libraries](/influxdb3/core/tags/client-libraries/)
