Blog:
嵌入式 Linux 基于 Qt 开发 SQLite 应用

简介
SQLite 是包含在一个相对很小的C程序库中的关系数据库管理系统,与其他数据库管理系统不同,SQLite 不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。基于上述特性,SQLite 非常适合于在嵌入式系统中实现一个轻量级的数据库管理,本文就展示基于嵌入式 Linux 和Qt GUI 开发一个 SQLite 演示例程。
本文所演示的平台来自于 Toradex Colibri iMX6 AR M嵌入式平台,这是一个基于 NXP iMX6 Arm 处理器,支持单核/双核 Cortex-A9。
准备
- Colibri iMX6 Arm 核心版配合 Colibri Eva Board 载板,连接调试串口 UART1 到开发主机方便调试。
- Colibri iMX6 系统使用基于 OpenEmbedded 框架重新编译的集成 Qt5.7 base 以及 Qsqllite 支持的 Toradex Linux image releaseV2.7 版本以及对应的 SDK。这个可以结合这里的说明自己进行编译, 也可以通过这里直接下载编译好的 image 和 SDK 文件,image 更新方法请参考这里。
- 关于开发主机 SDK安装和Qtcreator开发环境的配置请参考之前发布的《嵌入式Linux基于Qt开发GPIO应用一文》。
- 演示程序使用的 LCD 为 10inch 18bit LVDS 屏幕,请参考这里修改配置 u-Boot 显示分辨率。
QT演示程序开发
本文演示应用程序思路为,每隔10s读取当前系统时间以及 CPU 核心温度,并选择可以将数据保存到 SQLite 数据库中;同时程序可以查看当前数据库的数据条目。
- QT GUI 定义,如下所示
说明如下
- 上面一组文本框和按键用于显示当前系统的时间和 CPU 核心温度,每隔10s 刷新一次;点击 ”ADD” 按键可以将当前显示的数据保存到 SQLite 数据库中。
- 下面一组文本框和按键用于显示 SQLite数据库中的数据条目, ”Previous” / “Next” 按键用于查看上一条/ 下一条,”Delete” 按键用于删除当前条目,”Clear” 按键用于清除整个数据库。
- 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(QString sql_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();
- 主程序
由 “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-time Data”部分
- “ADD” 按键,点击动作响应,将当前获取的实时数据保存到数据库。
- “Previous” 按键,点击动作响应,显示上一条数据库数据信息,如果已经是第一条则无动作。
- “Next” 按键,点击动作响应,显示下一条数据库数据信息,如果已经是最后一条则无动作。
- “Delete” 按键,点击动作响应,删除当前条目数据,并将次条目后的所有条目id 序号减掉1,保证数据库数据条目id始终是连续的。
- “Clear” 按键,点击动作响应,将整个数据库数据清除。
- 最后还有一个 “data_time_temp_refresh” 程序为计时器链接的10s到时的响应程序,对采集数据进行刷新。
SQLite程序部署配置
- 将编译好的可执行程序 “qt-sqlite” 复制到Colibri iMX6模块 “/home/root” 目录下。
- 配置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.service,systemd自启动配置文件
https://github.com/simonqin09/QtSQLiteDemo/blob/master/qtdemo_launch.service
$ cp qtdemo_launch.service /etc/systemd/system/
$ systemctl enable qtdemo_launch
SQLite 示例程序演示
开机后,系统自动启动程序,如下所示:
演示操作视频请点击这里观看。
总结
本文基于 NXP iMX6 嵌入式平台在嵌入式 linux 系统下测试 SQLite数据库应用。
以上所有的信息仅供您的参考,其中并不包含任何承诺。Toradex 会不定期发布软件更新,以上信息不保证能够适用于最新的软件。关于文中任何的错误、遗漏或者链接内容,我们对此不承担责任。