Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >11-物联网开发终端管理篇-java从MQTT获取设备数据,并通过Druid连接池把数据写入MySQL数据库(Windows系统)

11-物联网开发终端管理篇-java从MQTT获取设备数据,并通过Druid连接池把数据写入MySQL数据库(Windows系统)

作者头像
杨奉武
发布于 2022-09-16 06:46:46
发布于 2022-09-16 06:46:46
2.7K0
举报
文章被收录于专栏:知识分享知识分享

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/iot\_terminal\_management" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

说明

这一节是使用java连接MQTT服务器,然后订阅主题获取所有设备数据,

然后通过Druid连接池把数据写入MySQL数据库.

注: java连接MQTT和Android连接MQTT是一样的.

java使用Druid连接池连接数据库可参考提供的MySQL基础开源教程.

java代码使用IntelliJ IDEA软件打开.

新建数据库和表格

1,新建数据库

2,数据库名字 historical_data,编码格式 utf8

3,在historical_data数据库里新建表格

4,添加几个字段

字段id,  类型是int, 去掉允许空值, 设置为自增,  然后设置为主键;

字段data_time,  类型设置为timestamp;(作为数据存储的时间)

字段client_id,  类型设置为varchar;(记录设备的id)

字段temperature,  类型设置为float;(存温度数据)

字段humidity,  类型设置为float;(存湿度数据)

5,点击保存 表格名字为 humiture_table

可以打开表看下,现在是没有数据

创建一个测试用户

1,说明

咱现在的数据库只能使用root账号在本机进行访问,

咱新建一个用户,让其可以在其它电脑上访问咱这个数据库

2,点击用户, 点击新建用户

3,用户名密码随意,主机那里填写 % (代表所有IP地址皆可访问)

4,点击权限, 点击添加权限

只选择historical_data这个数据库, 然后后面只选择上增删改查,刷新就可以了

注意哈,为了数据库的安全,一般数据库不能对外开放,咱测试的时候可以这样子.

 然后点击保存

5,在别的电脑上访问试一试

进来了

测试

1,使用IntelliJ IDEA 打开这节的工程

2,源码需要使用JDK1.8及其以上版本

如果版本小于1.8则需要安装(只需要安装,不需要配置环境变量)

安装完以后不需要配置环境变量,只需要在软件中设置JDK路径

2,修改为自己的数据库信息和MQTT服务器信息

3,根据自己的设备数据修改解析格式

如果设备的数据格式和我的不一样,用户根据自己的数据格式修改

我的设备上报数据的格式是 {"data":"sensor","type":"th","temperature":45,"humidity":23}

4,启动

5,可以在控制台看到监控的所有设备的数据

6,打开数据库表格

生成可执行jar包, 并安装运行到服务器

1,停止运行

2,因为程序已经设置过生成jar包,所以用户直接按照下面操作即可生成可执行jar包.

3,补充一下实际生成jar包的流程(用户不需要操作)

4,生成的jar包的位置

5,如果服务器没有安装JDK,请用户先安装JDK

如果已经安装了别的JDK版本,这个版本的可以只安装,不配置环境变量,

后面有说明怎么指定JDK运行. 记得往后看哈!

https://cloud.tencent.com/developer/article/1397720

6,把先前生成的jar包拷贝到服务器

7,打开命令窗口 cmd

8,进入到jar包目录

9,执行 java -jar MqttDataToMySQL.jar

10,打印所有设备的数据,说明已经运行起来了

让程序在后台运行

1,关闭

2,注意呀!不要犯常识性错误!把文件扩展名选中!

3,在jar包目录新建一个后缀名字为.bat的文件

编辑里面的内容如下(MqttDataToMySQL.jar 就是jar包的名字)

@echo off

start javaw -jar MqttDataToMySQL.jar

exit

4,双击运行即可

5,如果要关闭,找到任务管理器java运行进程,关闭即可

6,也可以指定JDK路径运行

C:\java8\jdk1.8.0.131  为JDK的安装路径

@echo off

set JAVA_HOME=C:\java8\jdk1.8.0.131

set CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOMe%\lib\tools.jar;

set Path=%JAVA_HOME%\bin;

start javaw -jar MqttDataToMySQL.jar

exit

程序说明

1.整个源码就两部分,MQTT和数据库

MQTT使用的是paho.client.mattv3-1.2.0的jar包

数据库除了基本的jabc连接器以外,使用了阿里巴巴的开源连接池 druid

2.初始化连接池和连接MQTT

3.连接池配置

4.连接MQTT,订阅主题

5.获取MQTT数据,从连接池获取链接对象,把数据写到数据库

注意事项1

1,正常情况下java软件也是放到服务器上的, 所以MQTT连接地址应该写为

tcp://localhost:1883

2,使用 localhost 连接MQTT服务器, 获取MQTT设备的所有数据可以直接订阅

3,同样的数据库连接地址也改为localhost , 数据库用户名和密码应该改为 root 的

修改完成以后,重新生成jar包,然后放到服务器上即可

注意事项2

常理来讲测试完毕之后需要禁止使用navicat 来访问数据库

可以把测试账号设置为本机访问

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java基础入门(四十六)
LinkedList类是集合新增元素和删除元素效率比较好,该集合的里面维护一个双向循环的链表,链表中它的每一个元素可以引用方式记下前一个元素和后一个元素,把所有的元素连接起来就可以了。
Java进阶者
2021/07/23
2590
Java之List
简介:本文通过算法比赛和工程的视角,为大家用最简短的篇幅讲解Java中List系列的用法,包括ArrayList,LinkedList。
GeekLiHua
2025/01/21
690
Java之List
【Java入门提高篇】Day32 Java容器类详解(十四)ArrayDeque详解
  今天来介绍一个不太常见也不太常用的类——ArrayDeque,这是一个很不错的容器类,如果对它还不了解的话,那么就好好看看这篇文章吧。
弗兰克的猫
2018/09/07
6810
【Java入门提高篇】Day32 Java容器类详解(十四)ArrayDeque详解
LinkedList的实现原理浅析
查看LinkedList的源码,发现其继承自AbstractSequentialList,实现了List,Deque,Cloneable以及Serializable接口,如:
孟君
2020/04/22
4600
arrayqueue源码_thinkphp源码分析
(1)双端队列,可从两端添加、删除元素。作为队列使用时,性能优于LinkedList。作为栈使用时,性能优于Stack。
全栈程序员站长
2022/11/05
1.4K0
arrayqueue源码_thinkphp源码分析
Java Review - Queue和Stack 源码解读
Java中有Stack类,却没有叫做Queue的类,它是个接口的名字。当需要使用栈时,Java已不推荐使用Stack,而是推荐使用更高效的ArrayDeque;
小小工匠
2021/11/15
2790
Java Review - LinkedList源码解读
从上图可知: LinkedList同时实现了List接口和Deque接口,既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(Stack) 。
小小工匠
2021/11/15
2340
arraydeque方法_arrayset
注意: ArrayDeque的迭代器和大多数容器迭代器一样,都是快速失败(fail-fast),但是程序不能利用这个特性决定是或否进行了并发操作。
全栈程序员站长
2022/11/08
3210
16(01)总结List的子类,ArrayList,Vector,LinkedList
1:List的子类(掌握) (1)List的子类特点 ArrayList: 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector: 底层数据结构是数组,查询快,增删慢 线程安全,效率低 LinkedList: 底层数据结构是链表,查询慢,增删快 线程不安全,效率高 (2)ArrayList A:没有特有功能需要学习 B:案例 a:ArrayList存储字符串并遍历 package cn.itcast_01; public class Student { priv
Java帮帮
2018/03/15
9740
Java中的LinkedList的方法的应用
在Java中,LinkedList提供了丰富的方法,可以模拟链式队列,链式堆栈等数据结构,为用户带来了极大的方便,下面看看这些方法的用法:
全栈程序员站长
2022/07/04
3350
菜鸟看源码之ArrayDeque
ArrayDeque实现了Deque接口,内部使用一个可调整大小的数组来存放元素。数组没有容量限制,必要的时候数组的容量会增加。ArrayDeque不是线程安全的。不允许添加Null元素。当ArrayDeque 作为一个栈来使用的时候,ArrayDeque 可能会比Stack 快。当ArrayDeque 作为 队列使用的时候,可能会比 LinkedList 速度要快。
全栈程序员站长
2022/11/05
5220
菜鸟看源码之ArrayDeque
【面试题精讲】ArrayDeque 与 LinkedList 的区别
ArrayDeque和LinkedList是Java集合框架中的两种双端队列实现类。它们分别基于数组和链表实现,在不同的场景下具有不同的优势。ArrayDeque适用于需要高效随机访问元素和栈/队列操作的场景,而LinkedList适用于需要频繁在头部或尾部进行插入和删除操作的场景。在选择使用哪种实现类时,可以根据具体的需求来决定。
程序员朱永胜
2023/10/22
9610
Java集合-Deque
Deque(java.util.Deque)接口代表着双向队列,意思就是可以从队列的两端增加或者删除元素,Deque就是双向Queue的意思。
后端码匠
2021/03/16
9150
java 方法 示例_Java ArrayDeque peekLast()方法与示例
ArrayDeque类peekLast()方法 (ArrayDeque Class peekLast() method)
用户7886150
2021/04/08
9330
Java官方笔记13集合
The Collections Framework is the most widely used API of the JDK.
dongfanger
2023/07/10
1970
Java官方笔记13集合
(48) 剖析ArrayDeque / 计算机程序的思维逻辑
查看历史文章,请点击上方链接关注公众号。 前面我们介绍了队列Queue的两个实现类LinkedList和PriorityQueue,LinkedList还实现了双端队列接口Deque,Java容器类中还有一个双端队列的实现类ArrayDeque,它是基于数组实现的。 我们知道,一般而言,由于需要移动元素,数组的插入和删除效率比较低,但ArrayDeque的效率却非常高,它是怎么实现的呢?本节我们就来详细探讨。 我们首先来看ArrayDeque的用法,然后来分析其实现原理,最后总结分析其特点。 用法 Arr
swiftma
2018/01/31
6930
(48)  剖析ArrayDeque / 计算机程序的思维逻辑
LinkedList源码分析(基于Java8)内部结构构造方法添加2检索3删除4迭代器5 例子6总结
LinkedList是一个实现了List接口和Deque接口的双端链表 有关索引的操作可能从链表头开始遍历到链表尾部,也可能从尾部遍历到链表头部,这取决于看索引更靠近哪一端。 LinkedList不是线程安全的,如果想使LinkedList变成线程安全的,可以使用如下方式: List list=Collections.synchronizedList(new LinkedList(...)); iterator()和listIterator()返回的迭代器都遵循fail-fast机制。 从上图可以看出Lin
JavaEdge
2018/05/16
9680
java arraydeque poll,Java ArrayDeque「建议收藏」
public interface Queue extends Collection {
全栈程序员站长
2022/11/08
4330
Queue 相关数据结构的原理与实现 (LinkedList, ArrayDeque, PriorityQueue)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ajianyingxiaoqinghan/article/details/82670681
剑影啸清寒
2019/05/26
6310
LinkedList源码学习
LinkedList源码学习 被transient修饰的first和last如何序列化呢 LinkedList中重写列writeObject方法,ObjectOutputStream中将调用ObjectStreamClass里的方法通过反射根据方法名称来调用writeObject方法,以LinkedList中定义的方式来序列化链表中的元素和size字段 private void writeObject(java.io.ObjectOutputStream s) throws java.
晓果冻
2022/09/08
6040
LinkedList源码学习
推荐阅读
相关推荐
Java基础入门(四十六)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档