原创 嵌入式Linux基于Qt开发SQLite应用

2018-3-15 11:01 2619 15 2 分类: MCU/ 嵌入式

ByToradex秦海

1). 简介

SQLite是包含在一个相对很小的C程序库中的关系数据库管理系统,与其他数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。基于上述特性,SQLite非常适合于在嵌入式系统中实现一个轻量级的数据库管理,本文就展示基于嵌入式LinuxQt GUI开发一个SQLite演示例程。


本文所演示的平台来自于Toradex Colibri iMX6 ARM嵌入式平台,这是一个基于NXP iMX6 ARM处理器,支持单核/双核Cortex-A9



2. 准备

a). Colibri iMX6 ARM核心版配合ColibriEva Board载板,连接调试串口UART1到开发主机方便调试。


b). ColibriiMX6系统使用基于OpenEmbedded框架重新编译的集成Qt5.7 base以及Qsqllite支持的Toradex Linux image releaseV27版本以及对应的SDK.这个可以结合这里的说明自己进行编译也可以通过这里直接下载编译好的imageSDK文件,image更新方法请参考这里


c). 关于开发主机SDK安装和Qtcreator开发环境的配置请参考之前发布的《嵌入式Linux基于Qt开发GPIO应用一文》。


d). 演示程序使用的LCD10inch 18bit LVDS屏幕,请参考这里修改配置uboot显示分辨率。



3). QT演示程序开发

本文演示应用程序思路为,每隔10s读取当前系统时间以及CPU核心温度,并选择可以将数据保存到SQLite数据库中;同时程序可以查看当前数据库的数据条目。

a). QT GUI 定义,如下所示

image001.png

说明如下:

./ 上面一组文本框和按键用于显示当前系统的时间和CPU核心温度,每隔10s刷新一次;点击 ”ADD”按键可以将当前显示的数据保存到SQLite数据库中。

./ 下面一组文本框和按键用于显示SQLite数据库中的数据条目,”Previous” /  “Next”按键用于查看上一条下一条,”Delete” 按键用于删除当前条目,”Clear” 按键用于清除整个数据库。


b). SQLite 基本操作子程序

在工程中创建了 sqliteset.cpp”  “sqliteset.h” 两个文件用于定义一些SQLite数据库的基本操作应用,具体代码如下:

sqliteset.h - https://github.com/simonqin09/QtSQLiteDemo/blob/master/sqliteset.h

sqliteset.cpp - https://github.com/simonqin09/QtSQLiteDemo/blob/master/sqliteset.cpp


主要定义了下面一些函数:

---------------------------------------------------

/* 创建Database */

QSqlDatabase sql_create();

/* 关闭database */

void sql_close(QSqlDatabase DatabaseName);

/* 创建database 表格 */

QSqlQuery sql_create_table(QStringsql_table_keys);

/* 插入数据到表格 */

int sql_insert_data(QSqlQuery sql_table,QString data_string);

/* 从表格删除数据 */

int sql_delete_data(QSqlQuery sql_table,QString delete_string, int id);

/* 清除整个表格 */

int sql_clear_table(QSqlQuery sql_table,QString clear_string);

/* 获取表格当前最大id */

int sql_select_maxid(QSqlQuery sql_table,QString select_string);

/* Colibri iMX6 CPU 核心温度读取 */

QString temp_read();

---------------------------------------------------


c). 主程序

 “mainwindow.h” “mainwindow.cpp” 组成,具体代码如下:

mainwindow.h - https://github.com/simonqin09/QtSQLiteDemo/blob/master/mainwindow.h

mainwindow.cpp – https://github.com/simonqin09/QtSQLiteDemo/blob/master/mainwindow.cpp


说明如下:

./ MainWindow 主程序里面主要完成了一些初始化,创建数据库,如果数据库已经存在,则将最后一条数据显示在“Record Data” 部分;另外,设置Timer,每隔10s中获取系统时间和CPU核心温度,并显示到 “Real-timeData”部分。

./ “ADD” 按键,点击动作响应,将当前获取的实时数据保存到数据库。

./ “Previous” 按键,点击动作响应,显示上一条数据库数据信息,如果已经是第一条则无动作。

./ “Next” 按键,点击动作响应,显示下一条数据库数据信息,如果已经是最后一条则无动作。

./ “Delete” 按键,点击动作响应,删除当前条目数据,并将次条目后的所有条目id 序号减掉1,保证数据库数据条目id始终是连续的。

./ “Clear” 按键,点击动作响应,将整个数据库数据清除。

./ 最后还有一个 “data_time_temp_refresh”程序为计时器链接的10s到时的响应程序,对采集数据进行刷新。



4). SQLite程序部署配置

a). 将编译好的可执行程序 “qt-sqlite”复制到Colibri iMX6模块“/home/root” 目录下。


b). 配置SQLite程序开机自启动

./ qtdemo_x11.sh,程序启动脚本文件

https://github.com/simonqin09/QtSQLiteDemo/blob/master/qtdemo_x11.sh

---------------------------------------------------

$ cp qtdemo_x11.sh /usr/bin

$ chmod +x qtdemo_x11.sh

---------------------------------------------------


./ qtdemo_launch.servicesystemd自启动配置文件

https://github.com/simonqin09/QtSQLiteDemo/blob/master/qtdemo_launch.service

---------------------------------------------------

$ cp qtdemo_launch.service /etc/systemd/system/

$ systemctl enable qtdemo_launch

---------------------------------------------------



5). SQLite 示例程序演示

a). 开机后,系统自动启动程序,如下所示

image003.png


b). 一个演示操作视频请点击这里观看



6). 总结

本文基于NXP iMX6嵌入式平台在嵌入式linux系统下测试SQLite数据库应用。


文章评论0条评论)

登录后参与讨论
我要评论
0
15
关闭 站长推荐上一条 /2 下一条