java使用influxDB数据库的详细代码

下面我将为您详细讲解Java使用InfluxDB数据库的详细代码。

1. InfluxDB简介

InfluxDB是一种开源的分布式时序数据库,广泛应用于监控、IoT、实时分析等领域。它具有以下特点:

  • 高效的写入和查询
  • 支持SQL查询语言
  • 支持数据压缩和自动删除
  • 支持分布式架构

2. 安装InfluxDB

在使用InfluxDB前,需要先下载并安装InfluxDB。官网提供了多种安装方式,这里以Docker方式为例。

# 先安装Docker
sudo apt install docker.io

# 拉取InfluxDB镜像
sudo docker pull influxdb

# 启动InfluxDB容器
sudo docker run -p 8086:8086 -v influxdb:/var/lib/influxdb influxdb

3. 连接InfluxDB

Java中连接InfluxDB的方式有多种,这里介绍使用Java API方式连接。需要先在Maven中添加InfluxDB Java API的依赖:

<dependency>
    <groupId>org.influxdb</groupId>
    <artifactId>influxdb-java</artifactId>
    <version>2.16</version>
</dependency>

在连接InfluxDB前,需要定义InfluxDB连接的配置文件:

InfluxDBConfig influxDBConfig = InfluxDBConfig.builder()
    .url("http://localhost:8086")
    .username("admin")
    .password("admin")
    .database("test")
    .build();

根据配置文件创建InfluxDB实例:

InfluxDB influxDB = InfluxDBFactory.connect(influxDBConfig);

4. 插入数据

插入数据需要先定义数据模型。以一个传感器温度数据为例:

@Data
public class SensorData {
    private String sensorId;
    private Timestamp timestamp;
    private Double temperature;
}

使用Java API方式插入数据:

SensorData sensorData = new SensorData();
sensorData.setSensorId("s1");
sensorData.setTimestamp(new Timestamp(System.currentTimeMillis()));
sensorData.setTemperature(22.5);

Point point = Point.measurement("temperature")
    .time(sensorData.getTimestamp().getTime(), TimeUnit.MILLISECONDS)
    .tag("sensorId", sensorData.getSensorId())
    .addField("temperature", sensorData.getTemperature())
    .build();

influxDB.write(point);

5. 查询数据

查询数据需要先定义查询语句。以查询传感器s1最近20条温度数据为例:

String query = String.format("SELECT temperature FROM temperature WHERE sensorId='s1' ORDER BY time DESC LIMIT 20");

使用Java API方式查询数据:

QueryResult queryResult = influxDB.query(new Query(query, database));
List<QueryResult.Result> results = queryResult.getResults();

if (results != null && !results.isEmpty()) {
    QueryResult.Result result = results.get(0);

    if (result.getSeries() != null && !result.getSeries().isEmpty()) {
        QueryResult.Series series = result.getSeries().get(0);

        List<String> columns = series.getColumns();
        List<List<Object>> values = series.getValues();

        // 处理查询结果
        for (List<Object> value : values) {
            Double temperature = Double.parseDouble(value.get(columns.indexOf("temperature")).toString());
            System.out.println(temperature);
        }
    }
}

6. 完整代码示例

以下是完整的Java使用InfluxDB的代码示例。

import lombok.Data;
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.InfluxDBIOException;
import org.influxdb.InfluxDBIOException.InfluxDBIOExceptionBuilder;
import org.influxdb.InfluxDBResponseException;
import org.influxdb.dto.Point;
import org.influxdb.dtO.Point.Builder;
import org.influxdb.dto.QueryResult;

import java.sql.Timestamp;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class InfluxDBExample {
    public static void main(String[] args) {
        // 数据库连接配置
        InfluxDBConfig influxDBConfig = InfluxDBConfig.builder()
            .url("http://localhost:8086")
            .username("admin")
            .password("admin")
            .database("test")
            .build();

        // 创建InfluxDB实例
        InfluxDB influxDB = InfluxDBFactory.connect(influxDBConfig);

        // 插入数据
        SensorData sensorData = new SensorData();
        sensorData.setSensorId("s1");
        sensorData.setTimestamp(new Timestamp(System.currentTimeMillis()));
        sensorData.setTemperature(22.5);

        Point point = Point.measurement("temperature")
            .time(sensorData.getTimestamp().getTime(), TimeUnit.MILLISECONDS)
            .tag("sensorId", sensorData.getSensorId())
            .addField("temperature", sensorData.getTemperature())
            .build();

        influxDB.write(point);

        // 查询数据
        String query = String.format("SELECT temperature FROM temperature WHERE sensorId='s1' ORDER BY time DESC LIMIT 20");

        QueryResult queryResult = influxDB.query(new Query(query, database));
        List<QueryResult.Result> results = queryResult.getResults();

        if (results != null && !results.isEmpty()) {
            QueryResult.Result result = results.get(0);

            if (result.getSeries() != null && !result.getSeries().isEmpty()) {
                QueryResult.Series series = result.getSeries().get(0);

                List<String> columns = series.getColumns();
                List<List<Object>> values = series.getValues();

                // 处理查询结果
                for (List<Object> value : values) {
                    Double temperature = Double.parseDouble(value.get(columns.indexOf("temperature")).toString());
                    System.out.println(temperature);
                }
            }
        }

        // 关闭InfluxDB连接
        influxDB.close();
    }

    @Data
    public static class SensorData {
        private String sensorId;
        private Timestamp timestamp;
        private Double temperature;
    }

    @Data
    public static class InfluxDBConfig {
        private String url;
        private String username;
        private String password;
        private String database;

        public static Builder builder() {
            return new Builder();
        }

        public static class Builder {
            private InfluxDBConfig config = new InfluxDBConfig();

            public Builder url(String url) {
                config.setUrl(url);
                return this;
            }

            public Builder username(String username) {
                config.setUsername(username);
                return this;
            }

            public Builder password(String password) {
                config.setPassword(password);
                return this;
            }

            public Builder database(String database) {
                config.setDatabase(database);
                return this;
            }

            public InfluxDBConfig build() {
                return config;
            }
        }
    }
}

以上是Java使用InfluxDB的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java使用influxDB数据库的详细代码 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Maven项目打Jar包并添加依赖步骤详解

    下面我来为您详细讲解“Maven项目打Jar包并添加依赖步骤详解”的完整攻略。 一、准备工作 1.安装Maven环境首先,你需要下载和安装Maven环境。在安装完成后,你可以通过在命令行窗口中输入“mvn -v”来检查环境是否成功安装。 2.创建Maven项目接下来,你需要在本地创建一个Maven项目。可以通过运行以下命令来实现: mvn archetype…

    Java 2023年5月19日
    00
  • 关于Java中如何实现文件的读写操作

    做Java开发时经常需要对文件进行读写操作,下面是Java中实现文件读写操作的完整攻略: 文件读操作 在Java中,我们可以使用FileInputStream或BufferedInputStream类来读取文件。对于二进制文件可以直接用FileInputStream,对于文本文件最好使用BufferedInputStream。 FileInputStream…

    Java 2023年5月20日
    00
  • Java实现的双向匹配分词算法示例

    Java实现的双向匹配分词算法是一种在中文分词中比较常用的算法。下面是完整攻略: 算法原理 双向匹配分词算法是通过正反两个方向分别匹配的方法来确定分词位置的。具体来说,它分别从文本的开头和结尾开始匹配,如果正反两边都匹配到了词,则以较短的那个词为准进行分词;如果其中一边没有匹配到词,则从另一边匹配下一个词。 算法实现 在Java中实现双向匹配分词算法的过程,…

    Java 2023年5月19日
    00
  • maven配置本地仓库的方法步骤

    Maven是一个在Java项目中广泛使用的构建工具,它能够管理项目依赖的库文件,以及自动构建、测试和部署项目。Maven默认使用Maven中央仓库来管理项目依赖,但也可以配置本地仓库来管理本地项目依赖。下面是如何在Maven中配置本地仓库的详细步骤: 步骤一:找到Maven设置文件(settings.xml) Maven的设置文件提供了许多自定义配置选项,其…

    Java 2023年5月20日
    00
  • jQuery中使用each处理json数据

    当我们需要处理JSON数据时,使用jQuery的each方法可以快速轻松地遍历JSON数组或对象。下文将详细讲解如何使用jQuery的each方法处理JSON数据,以下是完整攻略的具体步骤: 1. 引入jQuery库 要使用jQuery的each方法,我们首先需要引入 jQuery 库。可以通过以下代码,从CDN服务器中引入最新版的jQuery: <s…

    Java 2023年5月26日
    00
  • java外卖订餐系统小项目

    下面是”Java外卖订餐系统小项目”的完整攻略。 一、项目背景 本项目为一款基于Java语言开发的外卖订餐系统,目的是通过互联网技术使用户可以在线订餐并进行支付。本项目分前台、后台两部分,前台提供用户订餐、付款等功能,后台提供商家管理、订单管理等功能。 二、项目框架 1. 前台 前台框架采用SpringBoot + Thymeleaf模板引擎,其中重要功能包…

    Java 2023年5月24日
    00
  • Java实现邮件发送的过程及代码详解

    Java实现邮件发送的过程及代码详解 一、背景介绍 现在,在很多程序开发或运维工作中,邮件是经常使用的一种通讯方式。Java提供了SMTP协议和JavaMail API来实现邮件的发送和接收操作。SMTP协议主要用于传输邮件,而JavaMail API是用来操作邮件的。 二、JavaMail API的基本结构 JavaMail API的基本结构如下: Ses…

    Java 2023年6月15日
    00
  • SpringBoot日期格式转换之配置全局日期格式转换器的实例详解

    SpringBoot日期格式转换之配置全局日期格式转换器的实例详解 在SpringBoot开发中,日期格式转换是一项非常重要的工作。如果不进行日期格式转换,会导致很多问题,比如接收到的时间格式不正确,数据库存储的时间也不正确等等。为了解决这些问题,我们可以通过配置全局日期格式转换器来实现。下面我们将详细讲解如何配置。 配置全局日期格式转换器的方式 第一种方式…

    Java 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部