您当前的位置: 首页 >  sql

顺其自然~

暂无认证

  • 1浏览

    0关注

    1317博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Qt操作SQLite数据库的三种方式

顺其自然~ 发布时间:2022-04-27 18:01:46 ,浏览量:1

Qt访问Sqlite数据库的三种方式(即使用三种类库去访问),分别为QSqlQuery、QSqlQueryModel、QSqlTableModel,对于这三种类库,可看为一个比一个上层,也就是封装的更厉害,甚至第三种QSqlTableModel,根本就不需要开发者懂SQL语言,也能操作Sqlite数据库。

方式1. 使用QSqlQuery来访问

通过exec()成员函数来执行DML(数据操作语言)语句,如增删改查SELECT、INSERT、UPDATE和DELETE,以及DDL(数据定义语言)语句等。

在.pro文件中记得增加sql模块。(project)

说明:Qt自带SQLite数据库,不需要再单独安装,默认情况下,使用SQLite版本3,驱动程序为***QSQLITE***。

QT       += core gui printsupport sql
#include 
#include 
#include 
#include 
typedef struct _temp_data_t
{
    QString dateTime;
    double wenqu1;
    double wenqu2;
    double wenqu3;
    double wenqu4;
    qint32 status;
}TempData;
bool DBAUtils::openDb()
{
    if(QSqlDatabase::contains("qt_sql_default_connection"))
    {
        db = QSqlDatabase::database("qt_sql_default_connection");
    }
    else {
        db = QSqlDatabase::addDatabase("QSQLITE");
        db.setDatabaseName(QApplication::applicationDirPath() + "/database/" + "data.db");
    }

    if(!db.open())
    {
        qDebug()setHeaderData(3, Qt::Horizontal, QStringLiteral("温区2"));
        model->setHeaderData(4, Qt::Horizontal, QStringLiteral("温区3"));
        model->setHeaderData(5, Qt::Horizontal, QStringLiteral("温区4"));
        model->setHeaderData(6, Qt::Horizontal, QStringLiteral("状态"));

        while(model->canFetchMore())
            model->fetchMore();

        int column = model->columnCount(); //获取列数
        int row = model->rowCount(); //获取行数
        ui->lineEdit_columnCount->setText(QString("%1").arg(column));
        ui->lineEdit_rowCount->setText(QString("%1").arg(row));

        ui->tableViewHistory->setModel(model);
//        ui->tableViewHistory->horizontalHeader()->setHidden(true); //QTableView隐藏表头
        ui->tableViewHistory->verticalHeader()->setHidden(true); //把QTableView中第一列的默认数字列去掉
        ui->tableViewHistory->resizeColumnsToContents();

    }
}

在这里插入图片描述

问题总结 QSqlQueryModel/QSqlTableModel 仅能获取256行的问题

QSqlTableModel select数据完成后,当数据记录数目多于256时,rowCount 返回值最大为256.

为了强制获取整个数据集,可以使用以下代码:

while(model->canFetchMore())
    model->fetchMore();

参考:Qt操作SQLite数据库_宁静致远2021的博客-CSDN博客_qt与sqlite连接

关注
打赏
1662339380
查看更多评论
立即登录/注册

微信扫码登录

0.0954s