精华内容
下载资源
问答
  • QT+SQLITE代码

    2018-10-23 14:24:23
    QT+SQLITE代码实例,很实用,很多嵌入式项目上都可以使用该份代码。
  • 嵌入式Linux基于Qt开发SQLite应用

    千次阅读 2018-03-06 16:19:50
    ByToradex秦海1)....基于上述特性,SQLite非常适合于嵌入式系统中实现一个轻量级的数据库管理,本文就展示基于嵌入式LinuxQt GUI开发一个SQLite演示例程。 本文所演示的平台来自于Toradex Col...
    
    

    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数据库应用。

    展开全文
  • Qt下使用SQLite3

    热门讨论 2012-06-21 09:47:49
    编译环境:QT4.5+qt-creator2.4+arm-linux-gcc 4.3.3 程序是通过在QT槽函数中调用SQLite3的API来实现对数据库中的数据操作,这里我们默认嵌入式Linux中已经移植类SQLite3,程序中将调用SQLite3的库文件。
  • Linux下Qt4与SQLite3组合编程5部曲完整篇
  • //建立和qt和数据库连接 QSqlQueryModel model;//保存和遍历select结果 }; #endif // SQLITEQTDIALOG_H SqliteQtDialog.cpp #include "SqliteQtDialog.h" #include "ui_SqliteQtDialog.h" ...

     SqliteQtDialog.h

    #ifndef SQLITEQTDIALOG_H
    #define SQLITEQTDIALOG_H
    
    #include <QDialog>
    #include <QSqlDatabase>
    #include <QSqlQuery>
    #include <QSqlError>
    #include <QMessageBox>
    #include <QSqlQueryModel>
    #include <QDebug>
    
    namespace Ui {
    class SqliteQtDialog;
    }
    
    class SqliteQtDialog : public QDialog
    {
        Q_OBJECT
    
    public:
        explicit SqliteQtDialog(QWidget *parent = 0);
        ~SqliteQtDialog();
    
    private slots:
        void on_insertButton_clicked();
        void on_deleteButton_clicked();
        void on_modifyButton_clicked();
        void on_sortButton_clicked();
    private:
        void createDB(void);//创建数据库
        void createTable(void);//创建学生成绩表
        void queryTable(void);//查询数据表
    private:
        Ui::SqliteQtDialog *ui;
        QSqlDatabase db;//建立和qt和数据库连接
        QSqlQueryModel model;//保存和遍历select结果
    
    };
    
    #endif // SQLITEQTDIALOG_H

    SqliteQtDialog.cpp

    #include "SqliteQtDialog.h"
    #include "ui_SqliteQtDialog.h"
    
    SqliteQtDialog::SqliteQtDialog(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::SqliteQtDialog)
    {
        ui->setupUi(this);
        createDB();
        createTable();
        //查询和显示
        queryTable();
    }
    
    SqliteQtDialog::~SqliteQtDialog()
    {
        delete ui;
    }
    void SqliteQtDialog::createDB(void){//创建数据库
        //建立和SQlite数据库连接
        db = QSqlDatabase::addDatabase("QSQLITE");
        //设置数据库文件的名称
        db.setDatabaseName("menu.db");
        //打开数据库
        if(db.open() == false){
            QMessageBox::critical(this,"DataError",
                                  db.lastError().text());
        }
    }
    void SqliteQtDialog::createTable(void){//创建表
        //构建创建表的SQL语句
        QString createSql =
                QString("CREATE TABLE Student(\
                    id INT PRIMARY KEY NOT NULL,\
                    name TEXT NOT NULL,\
                    score REAL NOT NULL)");
         QSqlQuery query;
         query.exec(createSql);
    
    }
    void SqliteQtDialog::queryTable(void){//查询表
        QString str = QString("SELECT * FROM Student");
        model.setQuery(str);
        ui->tableView->setModel(&model);
    }
    void SqliteQtDialog::on_insertButton_clicked()
    {
        QSqlQuery query;
        //获取学号
        int id = ui->idEdit->text().toInt();
        //获取姓名
        QString name(ui->nameEdit->text());
        //获取成绩
        double score = ui->scoreEdit->text().toDouble();
        //构造sql语句
        QString insertSql = QString(
            "INSERT INTO Student VALUES(%1,'%2',%3);"
                    ).arg(id).arg(name).arg(score);
        qDebug() << insertSql;
        //执行sql语句
        query.exec(insertSql);
        query.exec("commit");
        //查询和显示
        queryTable();
    
    
    }
    //删除,通过ID匹配
    void SqliteQtDialog::on_deleteButton_clicked()
    {
        int id = ui->idEdit->text().toInt();
        //构造删除sql语句
        QString deleteSql = QString(
            "DELETE FROM Student WHERE id=%1").arg(id);
        QSqlQuery query;
        query.exec(deleteSql);
        //查询和显示
        queryTable();
    }
    //修改成绩
    void SqliteQtDialog::on_modifyButton_clicked()
    {
        QSqlQuery query;
        int id = ui->idEdit->text().toInt();
        double score = ui->scoreEdit->text().toDouble();
        QString modifySql = QString(
            "UPDATE Student SET score=%1 WHERE id=%2").
                arg(score).arg(id);
        qDebug() << modifySql;
        query.exec(modifySql);
        //查询和显示
        queryTable();
    }
    //排序
    void SqliteQtDialog::on_sortButton_clicked()
    {
        //获取排序关键字
        QString value = ui->ValueComboBox->currentText();
        //获取排序条件
        QString condition;
        if(ui->CondComboBox->currentIndex()){
            condition = "DESC";
        }
        else{
            condition = "ASC";
        }
        QString sortSql = QString(
            "SELECT * FROM Student ORDER BY %1 %2").
                arg(value).arg(condition);
        model.setQuery(sortSql);
        ui->tableView->setModel(&model);
    }
    
    

    SqliteQtDialog.ui

    展开全文
  • //打印Qt支持的数据库驱动 qDebug() (); //添加Sqlite数据库 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //设置数据库 db.setDatabaseName("../info.db"); //打开数据库 if( !db.open() ) ...
    #include "widget.h"
    #include "ui_widget.h"
    #include <QSqlDatabase>
    #include <QDebug>
    #include <QMessageBox>
    #include <QSqlError>
    #include <QSqlQuery>
    #include <QVariantList>
    
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
    
        //打印Qt支持的数据库驱动
        qDebug() << QSqlDatabase::drivers();
    
        //添加Sqlite数据库
        QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
        //设置数据库
        db.setDatabaseName("../info.db");
    
        //打开数据库
        if( !db.open() ) //数据库打开失败
        {
            QMessageBox::warning(this, "错误", db.lastError().text());
            return;
        }
    
        QSqlQuery query;
        query.exec("create table student(id int primary key, name varchar(255), age int, score int);");
    
        query.prepare("insert into student(name, age, score) values(?, ?, ?)");
        //给字段设置内容 list
        QVariantList nameList;
        nameList << "xiaoming" << "xiaolong" << "xiaojiang";
        QVariantList ageList;
        ageList << 11 << 22 << 33;
        QVariantList scoreList;
        scoreList << 59 << 69 << 79;
        //给字段绑定相应的值 按顺序绑定
        query.addBindValue(nameList);
        query.addBindValue(ageList);
        query.addBindValue(scoreList);
        //执行预处理命令
        query.execBatch();
    
        query.exec("select * from student");
    
        while(query.next()) //一行一行遍历
        {
            //取出当前行的内容
            qDebug() << query.value(0).toInt()
                     << query.value(1).toString()
                     << query.value("age").toInt()
                     << query.value("score").toInt();
        }
    
    
    
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    展开全文
  • linux下搭建sqlite环境,以及在Qt上访问数据库的类,测试数据库的操作。
  • 这是在linux下做的一个订餐管理系统,数据库使用的是sqlite,基本的功能都实现了,管理权限有总经理,系统管理员,前台管理员,客户,仓库管理员,菜单管理员,基本的订餐,菜单管理,仓库管理的功能都实现了
  • Qt Sqlite加密数据库驱动源代码

    热门讨论 2014-04-10 17:17:13
    这是我工作了一天的成果,压缩包内包括Qt sqlite加密驱动所有的代码,以及一个调用例程,还有一个sqlite3shell.exe工具,用于加密数据库命令行的分析。 使用这个加密驱动很简单,只需以下3步: 1. 将驱动的代码...
  • Qt使用sqlite数据库的问题

    千次阅读 2018-04-20 10:48:54
    之前使用数据库用的都是MySQL,觉得挺方便的,但最近做的程序要在Linux开发板上跑,就使用Qt自带的轻量级数据库sqlite,但使用过程中遇到了一些问题: 原代码(只贴相关代码): 头文件: #include &...

    之前使用数据库用的都是MySQL,觉得挺方便的,但最近做的程序要在Linux开发板上跑,就使用了Qt自带的轻量级数据库sqlite,但使用过程中遇到了一些问题:

    原代码(只贴相关代码):

    头文件:

    #include <QSqlDatabase> 
    QSqlDatabase db; 
    public:
        explicit Widget(QWidget *parent = 0);
        ~Widget();
        void DatabaseConnect();

    源文件:

    void frmMain::DatabaseConnect()
    {    //需要进行判断默认的连接名是否存在,
        //如果不存在才使用addDatabase()方法,如果存在则使用database()方法
        if(QSqlDatabase::contains("qt_sql_default_connection"))
            db = QSqlDatabase::database("qt_sql_default_connection");
        else
            db = QSqlDatabase::addDatabase("QSQLITE");
        //连接数据库
        db.setHostName("127.0.0.1"); //数据库服务器IP
        db.setUserName("ente");//用户名
        db.setPassword("000000");//密码
        db.setDatabaseName("ente.db");//使用的数据库,如果不存在,会自动创建
        if(!db.open())
        {
            QMessageBox::warning(this,"Error","Details:DB Open Error!");
        }
        QSqlQuery query;
        QString connectDB = QString("create table entedata (num int primary key auto_increment,time timestamp,ion int,temperature int,humidity int)");
        //新建数据表
        if(!query.exec(connectDB))//数据表创建失败
            {
            QSqlError lastError = query.lastError();
            QMessageBox::warning(this,"数据表创建失败","Details:"+lastError.driverText());
            return;
            } 
    }
    

    程序运行后弹出对话框提示:数据库创建失败
    然后我打开文件夹,发现有一个空的ente.db文件,说明数据库打开是成功的,我以为是我的SQL语句有问题,对照着一些参考书进行比对,还将这个SQL语句放在MySQL命令行中执行,执行成功!
    在大牛的帮助下,对代码进行修改,终于成功:

    更改后的代码(只贴相关代码)

    头文件同源代码
    源文件:

    void frmMain::DatabaseConnect()
    {    //需要进行判断默认的连接名是否存在,
        //如果不存在才使用addDatabase()方法,如果存在则使用database()方法
        if(QSqlDatabase::contains("qt_sql_default_connection"))
            db = QSqlDatabase::database("qt_sql_default_connection");
        else
            db = QSqlDatabase::addDatabase("QSQLITE");
        //连接数据库
        db.setHostName("127.0.0.1"); //数据库服务器IP
        db.setUserName("ente");//用户名
        db.setPassword("000000");//密码
        db.setDatabaseName("ente.db");//使用的数据库
        if(!db.open())
        {
            //QSqlError lastError = query.lastError();
            QMessageBox::warning(this,"Error","Details:DB Open Error!");
        }
        QSqlQuery query; 
        //判断数据表是否存在,不存在则创建
        if(!query.exec("select * from entedata"))
        {
        QString connectDB = QString("create table entedata(num integer primary key autoincrement,time timestamp,ion integer,temperature integer,humidity integer)");
        //创建数据表
        if(!query.exec(connectDB))//数据表创建失败
            {
            QSqlError lastError = query.lastError();
            QMessageBox::warning(this,"数据表创建失败","Details:"+lastError.driverText());
            return;
            }
        } 
        }

    改动点主要在SQL语句:
    改动前:

    create table entedata (num int primary key auto_increment,time timestamp,ion int,temperature int,humidity int)

    改动后:

    create table entedata(num integer primary key autoincrement,time timestamp,ion integer,temperature integer,humidity integer)

    错误原因:

    1、sqlite中,自动增长是autoincrement而不是auto_increment ,这里与MySQL不同;
    2、sqlite中,int 单独做数据类型没问题,做主键也没问题,做主键并且需要autoincrement 属性的话就得是
    integer primary key autoincrement

    展开全文
  • 参考:http://www.linuxidc.com/Linux/2011-11/47465.htm sqlite3编译安装 ------------------------arm版---------------------- 1.从官方网站下载sqlite-autoconf-3070602.tar.gz 2.解压,进入当前目录 3....
  • 一、系统要求说明: 1.Ubuntu 20.04 LTS(本人该系统操作的,其他尚未实践) 2.
  • Qt 使用Sqlite3数据库加密

    千次阅读 2018-06-06 09:37:41
    最近做一个嵌入式设备,因为设计密码问题,所以需要对sqlite数据库进行加密,但是找了好多例子都不能达到要求,好在最后终于找到一可用资源,本人亲测可用。源码:...
  • 文章目录SQLite可视化工具Linux以及WindowsSQLite的可视化工具SQLiteStudioWindowsSQLite的可视化工具SQLite ExpertlinuxSQLite的可视化工具SQLiteBrowser SQLite可视化工具 Linux以及WindowsSQLite...
  • Linux下安装及使用sqlite3数据库

    千次阅读 2017-08-05 20:24:29
    数据库数据库(Database)是按照数据结构来组织、存储...数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都各个方面得到了广泛的应用。SQL数据库简介SQL是Structured Query
  • qt4如果要支持sqlite3数据库,则必须修改qmke -project和qmake之后生成的Makefile文件中的INCPATH和LIBS目录:  INCPATH问Qt支持的头文件路径,...  例如我的sqlite3.h的路径为:/home/linux/uboot_compile/gcc-3.4.
  • Qt操作SQLite数据库

    2021-07-24 08:38:40
    SQLite 局限性SQL-92特性方面低并发操作应用限制NFS问题数据库规模对象的数目和类型宿主变量引用存储过程二、使用步骤(Qt操作SQLite数据库的三种方式)方式1. 使用QSqlQuery来访问 前言 一、SQLite 简介 本教程帮助您...
  • 所以研究了下SQLite3本地数据库加密的方法,百度之,有两种,一是加密数据后存入数据库,二是整个加密数据库; 如果选一改地方实在太多,所以一直找直接加密sqlite数据库的方法; 然后各种搜索,整合后可行的方式是...
  • #include "formlogin.h" #include "ui_formlogin.h" #include #include #include #include #include FormLogin::FormLogin(QWidget *parent) :  QDialog(parent), ... ui(new Ui::FormLogin)
  • sqlite qt 实例,linux下ARMGCC4.4.1编译过 (请重新编译) 没有下载分到找我542178150免费给你。。。
  • 下载 Qt SDK for Linux/X11 32-bit**(422MB) 下载文件为qt-sdk-linux-x86-opensource-2010.05.1.bin 下载完成后下载目录中执行chmod u+x qt-sdk-linux-x86-opensource-2010.05.1.bin <br /> ...
  • QtSQLite3的增、删、改、查操作

    千次阅读 2017-10-09 10:47:30
    QT对数据库具有完善的支持,不需要加任何其他插件就可以直接使用,但是如果你要是加了sqlite3插件,调用数据库就跟直接调用一个驱动一样,直接调用接口函数:open、close、……,换言之QT自带的数据库语言就用不上了...
  • qt+sqlite3

    千次阅读 2018-05-15 10:00:32
    网上查得可以不使用Qt自带的数据库,重新编译一个sqlite3库,然后在Qt使用这个库就可以了。为了使学习的更为全面,报着认真敲代码的态度,我将这个学习过程以博客的形式写出来。对程序中可能出现的问题,尽量...
  • 本文基于上一篇Sqlite数据库做一些基本的...1、上文中提供了windows下Sqlite数据库的安装方法,本文此增加Linux和Ubuntu下Sqlite的安装: 1)离线安装 //下载安装包 sqlite3_3.7.9-2ubuntu1_i386.deb//ubun...
  • sqlite是一个小型的数据库,多用嵌入式系统中,一下是我的
  • Qt Sqlite数据库加密

    2020-05-27 16:39:25
    sqlitecipher文件夹中的源码编译生成dll,将插件放入插件的sqldrivers文件夹,其中sqlitecipher.dll为release版本,sqlitecipherd.dll为debug版本 使用 参考原博文的方法可以完成调试 问题 过程中遇到数据库打开...
  • 1..pro文件中引入sql QT+=sql; 或者直接拼接,注意用空格隔开 QT+= core gui sql;...3.在Qt中创建数据库 头文件.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QSqlD
  • linux下sqlite3的使用

    万次阅读 2015-06-30 11:51:49
    请阅读安装包里的 INSTALL或者README 文件。SQLite已经内置了,你不需要安装任何附加的软件(additional software)。 Windows users可以下载SQLite扩展DLL。 这里简单介绍一下: 假设你得到的是源代码sqlite-...
  • linuxQt利用sqlite静态编译库

    千次阅读 2011-05-03 15:33:00
    sqlite3编译安装 ------------------------arm版---------------------- 1.从官方网站下载sqlite-autoconf-3070602.tar.gz 2.解压,进入当前目录 3.开始配置,执行命令如下(前提配置好交叉编译环境): ./...
  • linuxqt程序开发好后会遇到一个问题,就是如何将开发好的程序打包成便于安装的安装包,然后发布给客户使用。这个过程总体可以分为两个步骤:编译和打包 1.编译qt程序 方法1: 使用qtcreator直接编译qt程序 方法2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,799
精华内容 2,719
关键字:

在linux下qt使用sqlite

linux 订阅