一.概述
Qt访问Sqlite数据库的三种方式(即使用三种类库去访问),QSqlQuery、QSqlQueryModel、QSqlTableModel,对于这三种类库,可看为一个比一个上层,也就是封装的更厉害,甚至第三种QSqlTableModel,根本就不需要开发者懂SQL语言,也能操作Sqlite数据库。
二.Qt读写Sqlite数据库的三种方式
1.QSqlQuery方式:
(1)上一篇文章《QT6实现创建与操作sqlite数据库(一)》已经讲述了QSqlQuery方式操作sqlite数据库,有详细代码,文章链接:
https://blog.csdn.net/xieliru/article/details/136829200?spm=1001.2014.3001.5502
(2)可以执行任意的SQL语句,可直接进行insert、delete、update等操作
优点:
完全自由编写和执行sql语句,可做任意的查询和操作
性能高,可直接操作数据库结构
支持事务
缺点:
需要自行处理结果集,较复杂
不支持直接编辑。需要自行在程序中处理添加、修改和删除。
2.QSqlQueryModel :通过设置SELECT语句查询获取内容,Model数据是只读的,不能进行编辑。所以需要结合QSqlQuery一起使用。
3.QSqlTableModel : 直接设置一个数据表的名称,可以获取数据表的全部记录,拓展在于在各种view上展示表格数据的同时,还允许用户进行编辑操作。
继承于QSqlQueryModel,与QSqlQueryModel功能相似。
比QSqlQueryModel的限制在于不能是任意sql语句,只是对单个数据表操作。
该类提供了一个可读写单张SQL表的可编辑数据模型,功能:修改,插入,删除,查询和排序。
- QSqlRelationalTableModel: 编辑一个数据表,将代码字段通过关系与代码表关联,将代码字段的编辑转换为直观的内容选择编辑。
- QSqlTableModel常用函数
//获取水平头或垂直头标题
QVariant headerData ( intsection,Qt::Orientationorientation, introle= Qt::DisplayRole ) const
//设置水平头或垂直头标题
bool setHeaderData ( intsection,Qt::Orientationorientation, constQVariant&value, introle= Qt::EditRole )
//返回行数
int rowCount ( constQModelIndex&parent= QModelIndex() ) const
//返回列数
int columnCount ( constQModelIndex&index= QModelIndex() ) const
//model->removeColumns (0)删除第一列
virtual bool removeColumns ( int column, int count, const QModelIndex & parent = QModelIndex() )
//提交所有被修改的数据,然后修改的数据被保存在数据库中
bool QSqlTableModel::submitAll ()
//撤销所有的修改,如果数据库已经被提交了修改,就不能通过撤销修改改回来了
void QSqlTableModel::revertAll ()
//恢复指定行的改变
virtual void revertRow ( int row )
//筛选,按照字符串filter对数据库进行筛选,相当于SQL中的WHERE语句
void QSqlTableModel::setFilter ( const QString & filter )
//在筛选和排序的条件下,将数据库中符合要求的在mode表格中显示出来
bool QSqlTableModel::select ()
//排序操作。按照列和Qt::SortOrder排序。Qt::SortOrder有升序和降序
void QSqlTableModel::setSort ( int column, Qt::SortOrder order )
//插入行
bool insertRow ( int row, const QModelIndex & parent = QModelIndex() )
// 插入列
bool insertColumn ( intcolumn, constQModelIndex&parent= QModelIndex() )
//设置保存策略为手动提交
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
参考文章:
https://blog.csdn.net/wxl1986622/article/details/107429450
标签:QT6,sqlite,const,Qt,方式,int,数据库,QSqlTableModel,QModelIndex From: https://blog.csdn.net/xieliru/article/details/136863990