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日

相关文章

  • Springboot处理异常的常见方式

    在Springboot中,异常处理是一个非常重要的话题。对于Web应用程序来说,它尤其重要,因为在 Web 应用程序中,您需要处理各种类型的异常,并向客户端发送有意义的响应。本文将为您介绍在Springboot中处理异常的常见方式。 异常处理的概念 异常处理:所谓异常处理,就是在应用程序执行出错时,能够捕获到错误并对其进行处理,让应用程序继续运行的一种技术。…

    Java 2023年5月27日
    00
  • Java中的File类是什么?

    File类是Java中的一个类,用于操作文件或文件夹。它主要用于获取文件或文件夹的属性、操作(创建、删除、重命名等)文件或文件夹。 File类的基本使用 File类提供了多个构造方法,可以使用文件路径或URI来创建一个文件实例,例如: // 通过文件路径创建File实例 File file = new File("C:/test.txt"…

    Java 2023年4月27日
    00
  • java Date类详解及使用总结

    Java Date类详解及使用总结 什么是Java Date类 在Java中,Date类代表了一个日期或者时间的抽象概念。Date类中包含了当前日期和时间的信息,可以通过它来进行日期和时间的操作。 Date类的构造方法 Date类有下面三个构造方法: public Date() 创建一个表示当前时间的Date对象。 public Date(long date…

    Java 2023年5月20日
    00
  • JavaWeb实战之编写单元测试类测试数据库操作

    下面是JavaWeb实战之编写单元测试类测试数据库操作的完整攻略: 什么是单元测试? 单元测试是指针对程序模块(软件设计的最小单元)来进行正确性检验的测试工作,通常是由开发人员编写用于保证代码质量的测试代码。在软件开发中,单元测试是非常重要的一部分,它能够帮助我们及时发现和修复程序中的缺陷,从而降低维护和开发成本。 单元测试的好处 提高代码质量 减少代码的B…

    Java 2023年5月20日
    00
  • SpringBoot使用validation做参数校验说明

    下面是Spring Boot使用Validation做参数校验的攻略: 什么是Validation Validation是一种Java Bean Validation规范的实现,它提供了一种声明式验证的方式,可以在不依赖业务逻辑的情况下对请求参数进行校验,从而避免了代码重复和漏写校验的问题。 如何使用Validation 第一步:添加Validation依赖…

    Java 2023年5月20日
    00
  • Java实现登录与注册页面

    下面是Java实现登录和注册页面的具体攻略: 1. 准备工作: 下载并安装Java JDK,安装JDK后需要配置一下环境变量,确保能在控制台中使用javac和java命令。 安装Java IDE,如Eclipse、IntelliJ IDEA等。 2. 实现注册页面 (1)创建Java web项目 打开IDE,点击File -> New -> Dy…

    Java 2023年5月19日
    00
  • JavaWeb简单用户登录注册实例代码(有验证码)

    下面来详细讲解“JavaWeb简单用户登录注册实例代码(有验证码)”的完整攻略。 1. 需求分析 在开始编写代码前,首先需要明确需求。这个JavaWeb实例主要实现以下功能: 用户注册:包括用户名、密码、确认密码以及验证码; 用户登录:包括用户名、密码以及验证码的校验; 验证码:生成随机数,用户填写后验证; 2. 技术栈 这个JavaWeb实例的技术栈主要包…

    Java 2023年6月15日
    00
  • Java后台接口开发初步实战教程

    我将详细讲解“Java后台接口开发初步实战教程”的完整攻略。首先,需要明白一个概念:后台接口指的是用来与前端页面进行数据交互的一种接口,是连接前端页面和后台数据库的桥梁。 接下来,我们来看一下Java后台接口的开发流程: Java后台接口开发流程 首先,需要准备好Java开发环境和相应的开发工具,如Eclipse、IntelliJ IDEA等; 接着,需要设…

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