QT读写Sqlite

在.pro文件中添加QT += sql
执行qmake
QT对一些基本的数据库的访问封装,可谓是极大的方便的我们开发人员,现在我们就来说下QT对Sqlite这个数据库的读写,Sqlite是一个比较小型的本地数据库,对于保存一些软件配置参数或量不是很大的数据是相当的方便,Qt本身已经自带了Sqlite的驱动,直接使用相关的类库即可,这篇我们主要来说明QT访问Sqlite数据库的三种方式(即使用三种类库去访问),分别为QSqlQuery、QSqlQueryModel、QSqlTableModel,对于这三种类库,可看为一个比一个上层,也就是封装的更厉害,甚至第三种QSqlTableModel,根本就不需要开发者懂SQL语言,也能操作Sqlite数据库。

1、首先使用QSqlQuery来访问
我们先要在工程中包含与数据库相关的几个头文件

     #include <QtSql/QSqlDatabase>
      #include <QtSql/QSqlRecord>
      #include <QtSql/QSqlQuery>
#include <QtWidgets/QApplication>
#include <QCoreApplication>
#include <QDebug>

#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlRecord>

typedef struct _testInfo //假定数据库存储内容
{
    QString UsreName;
    QString IP;
    QString Port;
    QString PassWord;
    QString Type;

}testInfo;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QVector<testInfo> infoVect; //testInfo向量,用于存储数据库查询到的数据

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");  

    db.setDatabaseName(QApplication::applicationDirPath() + "/CONFIG/" + "CONFIG.db");
    if (!db.open())
    {
        return 0;
    }

/**************************使用QSqlQuery操作数据库**************************/
    QSqlQuery query;    //执行操作类对象

    //查询数据
    query.prepare("SELECT * FROM T_USER_MANAGE");
    query.exec();   //执行

    QSqlRecord recode = query.record();     //recode保存查询到一些内容信息,如表头、列数等等
    int column = recode.count();            //获取读取结果的列数 
    QString s1 = recode.fieldName(0);       //获取第0列的列名

    while (query.next())
    {
        testInfo tmp;
        tmp.UsreName = query.value("UsreName").toString();
        tmp.IP = query.value("IP").toString();
        tmp.Port = query.value("Port").toString();
        tmp.PassWord = query.value("PassWord").toString();
        tmp.Type = query.value("Type").toString();

        infoVect.push_back(tmp);   //将查询到的内容存到testInfo向量中
    }

    for (int i=0; i<infoVect.size(); i++)    //打印输出
    {
        qDebug() << infoVect[i].UsreName << ":" \
                 << infoVect[i].IP << ":"       \
                 << infoVect[i].Port << ":"     \
                 << infoVect[i].PassWord << ":" \
                 << infoVect[i].Type;
    }

    //插入数据
    query.prepare("INSERT INTO T_USER_MANAGE (UsreName, IP, Port, PassWord, Type) VALUES (:UsreName, :IP, :Port, :PassWord, :Type)");
    query.bindValue(":UserName", "user4");  //给每个插入值标识符设定具体值
    query.bindValue(":IP", "192.168.1.5");
    query.bindValue(":Port", "5004");
    query.bindValue(":PassWord", "55555");
    query.bindValue(":Type", "operator");
    query.exec();   


    //更改表中 UserName=user4 的Type属性为admin
    query.prepare("UPDATE T_USER_MANAGE SET Type='admin' WHERE UserName='user4'");
    query.exec();

    //删除表中 UserName=user4的用户信息
    query.prepare("DELETE FROM T_USER_MANAGE WHERE UserName='user4'");
    query.exec();
    query.clear();

/**************************使用QSqlQuery操作数据库END***********************/
return 0;
}

使用QSqlQueryModel来访问
QSqlQueryModel类带有Model字样,相信你已经猜到我们可以用他来关联试图,就能把数据库的内容显示到视图上,当然,常规的操作也是可以的,但是我们只说说怎么用这个类来把数据库中的内容显示到是视图中,这里我们选择的视图类为QTableView,直接上代码吧

#include <QtWidgets/QApplication>
#include <QCoreApplication>
#include <QDebug>
#include <QString>
#include <QTableView>

#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQueryModel>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

    db.setDatabaseName(QApplication::applicationDirPath() + "/CONFIG/" + "CONFIG.db");
    if (!db.open())
    {
        return 0;
    }

    QSqlQueryModel *model = new QSqlQueryModel;
    model->setQuery("SELECT * FROM T_USER_MANAGE", db); //从给定的数据库db执行sql操作, db需预先制定并打开

    int column = model->columnCount();  //获取列数
    int row = model->rowCount();        //获取行数

    model->setHeaderData(0, Qt::Horizontal, QStringLiteral("用户名")); //设置表头,如不设置则使用数据库中的默认表头
    model->setHeaderData(1, Qt::Horizontal, QStringLiteral("IP地址"));
    model->setHeaderData(2, Qt::Horizontal, QStringLiteral("端口"));
    model->setHeaderData(3, Qt::Horizontal, QStringLiteral("密码"));
    model->setHeaderData(4, Qt::Horizontal, QStringLiteral("用户类型"));

    QTableView *view = new QTableView;  //定义视图,只能用于显示,不能修改数据库
    view->setFixedSize(500, 200);
    view->setModel(model);

    view->show();

    return a.exec();
}

另外一篇参考
https://www.cnblogs.com/xia-weiwen/archive/2017/05/04/6806709.html

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: arm是一种处理器架构,常用于嵌入式系统中的移动设备和单板计算机。QT5是一个跨平台的C++图形用户界面(GUI)应用程序开发框架,可以在不同的操作系统和硬件平台上使用。SQLite是一种轻量级的嵌入式关系型数据库管理系统。 在ARM平台上,使用QT5和SQLite可以实现嵌入式设备的快速开发和可靠的数据库管理。QT5提供了丰富的GUI库和工具,可以轻松创建各种界面元素和交互式应用程序。SQLite提供了高效的数据存储和访问功能,适用于嵌入式设备的有限资源环境。 使用QT5开发ARM平台上的应用程序,可以通过QT的跨平台性,使开发人员能够在不同的设备和系统上轻松移植应用程序。同时,QT的模块化结构和丰富的库使开发人员可以高效地开发和维护应用程序。 在应用程序中使用SQLite作为数据库引擎,可以提供可靠的数据存储和管理。SQLite的嵌入式特性使得其可以轻松地集成到ARM设备中,且不需要额外的服务器或配置。SQLite还具有高性能和小内存占用的特点,适合嵌入式系统中的数据管理需求。 总之,使用ARM、QT5和SQLite的组合可以实现强大的嵌入式应用程序开发。ARM提供了高性能的处理器架构,QT5提供了跨平台的GUI开发框架,SQLite提供了高效的嵌入式数据库管理功能。这个组合可用于开发各种嵌入式设备,从智能手机到单板计算机,为用户提供稳定、可靠的应用程序和数据库管理功能。 ### 回答2: ARM是一种基于RISC架构的微处理器系列,广泛应用于各类嵌入式设备中。而Qt是一种跨平台的应用程序开发框架,允许开发者使用统一的API来开发软件。SQLite是一种轻量级的关系型数据库管理系统,被广泛用于嵌入式系统中的数据存储和查询。 在ARM平台上使用Qt5和SQLite可以实现很多功能。首先,Qt5提供了丰富的UI组件和功能库,可以通过图形界面操作和显示数据库中的数据,从而方便用户操作和查询数据。例如,可以通过Qt5实现一个用户界面,用于输入学生信息并将其存储到SQLite数据库中。 其次,Qt5还提供了网络通信功能,可以与服务器端数据库进行数据交互。比如,在一个智能家居控制系统中,可以通过Qt5编写一个客户端软件,通过网络连接到服务器端SQLite数据库,实现家居设备的控制和状态查询。 此外,Qt5支持多线程编程,可以在ARM平台上实现并发访问SQLite数据库的功能。例如,在一个多线程的嵌入式设备中,可以使用Qt5编写一个后台服务程序,多线程同时读写SQLite数据库,用于实时更新设备状态和数据传输。 综上所述,ARM平台上的Qt5和SQLite结合可以实现丰富的嵌入式系统功能,包括数据存储、查询、网络通信和多线程操作等。这种组合能够提升嵌入式设备的用户体验和系统性能,为开发者提供灵活可靠的开发框架和数据库管理方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值