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

2018年3月7日星期三

简介

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

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

准备

  1. Colibri iMX6 Arm 核心版配合 Colibri Eva Board 载板,连接调试串口 UART1 到开发主机方便调试。
  2. Colibri iMX6 系统使用基于 OpenEmbedded 框架重新编译的集成 Qt5.7 base 以及 Qsqllite 支持的 Toradex Linux image releaseV2.7 版本以及对应的 SDK。这个可以结合这里的说明自己进行编译, 也可以通过这里直接下载编译好的 image SDK 文件,image 更新方法请参考这里
  3. 关于开发主机    SDK安装和Qtcreator开发环境的配置请参考之前发布的《嵌入式Linux基于Qt开发GPIO应用一文》。
  4. 演示程序使用的 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程序部署配置

  1. 将编译好的可执行程序 “qt-sqlite” 复制到Colibri iMX6模块 “/home/root” 目录下。
  2. 配置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

SQLite 示例程序演示

开机后,系统自动启动程序,如下所示:

演示操作视频请点击这里观看。

总结

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

以上所有的信息仅供您的参考,其中并不包含任何承诺。Toradex 会不定期发布软件更新,以上信息不保证能够适用于最新的软件。关于文中任何的错误、遗漏或者链接内容,我们对此不承担责任。

作者: 秦海,技术销售工程师,韬睿(上海)

评论

Please login to leave a comment!
Have a Question?