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();
}
}
QSqlTableModel select数据完成后,当数据记录数目多于256时,rowCount 返回值最大为256.
为了强制获取整个数据集,可以使用以下代码:
while(model->canFetchMore())
model->fetchMore();
参考:Qt操作SQLite数据库_宁静致远2021的博客-CSDN博客_qt与sqlite连接