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

yizhihongxing

下面我将为您详细讲解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日

相关文章

  • Tomcat多实例与负载均衡示例详解

    Tomcat多实例与负载均衡示例详解 什么是Tomcat多实例? Tomcat多实例是指在同一台机器上运行多个Tomcat服务器实例,在不同的端口或IP地址上监听请求,实现多个应用的隔离和独立。Tomcat多实例可以提高服务器资源利用率,提高系统的可靠性和稳定性。 如何配置Tomcat多实例? 步骤一:创建Tomcat实例目录 在Tomcat安装目录下创建多…

    Java 2023年6月2日
    00
  • Java实现普通类注入service对象

    使用Java实现普通类注入service对象的完整攻略如下: 步骤一:创建service类 首先,我们需要创建一个service类,它是一个标准的Java类,用于实现我们想要注入的业务逻辑。例如: package com.example.service; import org.springframework.stereotype.Service; @Serv…

    Java 2023年5月26日
    00
  • Java设计模式之java状态模式详解

    Java设计模式之Java状态模式详解 简介 Java状态模式是一个行为型设计模式,其可以通过改变对象内部的状态来改变对象的行为。这个模式可以在对象行为随状态改变的场景中实现。 适用场景 适用场景如下所示: 对于一个对象的某个行为,实现多种状态,这些状态之间能够相互转换。 当一个对象的行为依赖于它的状态,并且它需要在运行时根据状态改变其行为时。 模式结构 J…

    Java 2023年5月26日
    00
  • 常见的垃圾回收算法有哪些?

    以下是关于常见的垃圾回收算法的完整使用攻略: 常见的垃圾回收算法有哪些? 垃圾回收算法指在垃圾回收过程中,如何判断哪些内存空间是垃圾,哪些内存空间是可用的。常见的垃圾回收算法有以下几种: 1. 引用计数算法 引用计数算法是一种简单的垃圾回收算法,它通过计算每个对象被引用的次数来判断对象是否为垃圾。当一个对象的引用计数为0时,就可以将其回收。引用计数算法的优点…

    Java 2023年5月12日
    00
  • JTS空间坐标Geometry使用

    Geomtery子类图 创建Geometry GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); // 点 Coordinate coord = new Coordinate(1, 1); Point point = geometryFactory.createPo…

    Java 2023年4月23日
    00
  • mybatis generator 配置 反向生成Entity简单增删改查(推荐)

    这里简单介绍一下使用MyBatis Generator配合MyBatis Plus快速生成增删改查的简单攻略,涉及到以下步骤: 添加相关依赖:在项目中添加MyBatis Generator依赖和MyBatis Plus依赖,例如在Maven项目中的pom.xml文件中添加如下依赖: <dependencies> <dependency&gt…

    Java 2023年5月20日
    00
  • JavaWeb中导出excel文件的简单方法

    下面是JavaWeb中导出Excel文件的简单方法的完整攻略。 步骤一:导入相关的依赖 在项目中导出Excel文件,需要用到POI库。因此需要在pom.xml中导入相关的依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</…

    Java 2023年5月26日
    00
  • SpringMVC教程之文件上传与下载详解

    下面我会为大家详细讲解“SpringMVC教程之文件上传与下载详解”的完整攻略。 一、背景 在 web 开发中,文件的上传和下载是非常常见的操作。Spring 框架提供了相应的类和接口,可以方便地实现文件上传和下载功能。本文将结合两个实例,介绍 SpringMVC 的文件上传和下载的实现方法。 二、文件上传 2.1 概述 文件上传分为两步: 在表单中添加文件…

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