当前位置: 首页 > news >正文

QT 中 sqlite 数据库使用

一、前提

	--pro文件添加sql模块QT += core gui sql

二、使用

说明
	--用于与数据库建立连接QSqlDatabase--执行各种sql语句QSqlQuery--提供数据库特定的错误信息QSqlError
查看qt支持的驱动
    QStringList list = QSqlDatabase::drivers();qDebug()<<list;
连接 sqlite3 数据库

声明:

	#include <QSqlDatabase>QSqlDatabase db;	//该类对象,就相当于一个数据库

实现:

	--通常放在构造函数中// 加载驱动db = QSqlDatabase::addDatabase("QSQLITE");  //QSQLITE驱动--连接的是sqlite3数据库//连接成功,返回一个数据库对象// 设置数据库名db.setDatabaseName("company.db");//数据库文件后缀:.db	// 打开数据库  if(!db.open())  //open打开成功返回 true                {               qDebug()<<"数据库打开失败:"<<db.lastError();   //lastError:返回有关数据库上发生的最后一个错误的信息。}
执行 sql 语句
    // 创建对象QSqlQuery query;    //创建该对象是,系统自动完成和数据库的关联// 定义一条创建表的sql语句QString createTable = "create table staffInformation (id integer, name varchar(20), age int) ";// 执行sql语句if(!query.exec(createTable)){qDebug() <<"create table error:" <<db.lastError();}
    // 插入数据QString insertData = "insert into staffInformation(id, name, age) values(1, 'chen', 18)";// 执行sql语句if(!query.exec(insertData)){qDebug() <<"insert data error:" <<db.lastError();}
	// 查询数据QString selectData = "select * from staffInformation";// 执行sql语句if(!query.exec(selectData)){qDebug() <<"select data error:" <<db.lastError();}else{while (query.next()) {qDebug() <<query.value("id").toUInt()<<query.value("name").toString()<<query.value("age").toUInt();}}
    //删除数据QString deleteData = "delete from staffInformation where id = 1;";// 执行sql语句if(!query.exec(deleteData)){qDebug() <<"delete data error:" <<db.lastError();}
    // 更新数据QString updateData = "update staffInformation set name = 'yuan' where id = 1;";// 执行sql语句if(!query.exec(updateData)){qDebug() <<"update data error:" <<db.lastError();}
使用 QSqlQueryModel 模型查询数据( QSqlQUeryModel 默认是只读数据模型)
    // 创建对象,并设置表头信息QSqlQueryModel *model = new QSqlQueryModel;// 执行sql语句model->setQuery("select * from staffInformation");	//将查询的结果转换成model对象(结果集)// 根据需求设置表头信息model->setHeaderData(0, Qt::Horizontal, "id");model->setHeaderData(1, Qt::Horizontal, "name");model->setHeaderData(2, Qt::Horizontal, "age");// 给ui控件设置模型QTableView *tableView = new QTableView(this);tableView->setFixedSize(this->width(), this->height());//设置tableView大小tableView->setModel(model);	//传入表格模型tableView->show();   //显示表格
使用 QSqlQueryModel 模型修改数据

1,创建一个类,重写 QSqlQueryModel 虚函数

public://重写基类虚函数bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); //修改数据库数据Qt::ItemFlags flags(const QModelIndex &index) const;    // 表格可编辑状态设置private://自定义函数接口void refresh();//更新数据bool setName(int useId, const QString &name);//根据需求修改表中的数据
//修改数据库数据
bool eidtQueryModel::setData(const QModelIndex &index, const QVariant &value, int role)
{//判断是否有效列if(index.column() < 1 || index.column() > 3)return false;//获取列对应的 idQModelIndex prinmaryIndex = QSqlQueryModel::index(index.row(), 0);int id = this->data(prinmaryIndex).toInt(); //获取表中字段的 id// 在修改行时,将整个model清空this->clear();//根据需求修改对应的列bool ok = false  ;if(index.column() == 1){ok = setName(id, value.toString());}//刷新数据refresh();return ok;
}// 表格可编辑状态设置
Qt::ItemFlags eidtQueryModel::flags(const QModelIndex &index) const
{// 获取原有单元格的编辑状态Qt::ItemFlags flag = QSqlQueryModel::flags(index);// 给原有标志位增加一个可编辑的标志if(index.column() == 1) //仅限第一列可编辑flag = flag | Qt::ItemIsEditable;   //给它设置一个可编辑的状态return flag;
}//更新数据
void eidtQueryModel::refresh()
{//相当于将数据库的数据查询出来,转换成一个modelthis->setQuery("select * from staffInformation");this->setHeaderData(0, Qt::Horizontal, "name"); //设置表头
}//根据需求修改表中的数据
bool eidtQueryModel::setName(int useId, const QString &name)
{//相当于一个刷新操作QSqlQuery query;query.prepare("update staffInformation set name = ? where id = ?");query.addBindValue(name);query.addBindValue(useId);return query.exec();
}

2,使用

    // 创建模型对象eidtQueryModel *model = new eidtQueryModel;//执行sqlmodel->setQuery("select id, name, age from staffInformation");//设置表头model->setHeaderData(0, Qt::Horizontal, "id");model->setHeaderData(1, Qt::Horizontal, "name");model->setHeaderData(2, Qt::Horizontal, "age");//给ui控件设置模型QTableView *tableView = new QTableView(this);tableView->setFixedSize(this->width(), this->height());//设置tableView大小tableView->setModel(model);// 传入表格模型tableView->show();   // 显示表格

三、其他

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/500392.html

相关文章:

  • 不一样的CSS(4)--icon图标系列之svg
  • Level DB --- Cache
  • 学在西电录播课使用python下载,通过解析m3u8协议、多线程下载ts视频块以及ffmpeg合并
  • Springboot3介绍
  • Oracle 11G DataGuard GAP 修复过程(通过主库scn增备恢复)
  • WLAN AutoConfig服务假死?重启服务恢复网络连接!
  • 【linux】(30)shell-条件判断
  • docker安装启动问题解决排查
  • 《MySQL 查询进阶:复杂查询语句的魅力》
  • OpenHarmony-3.HDF框架(2)
  • 人大金仓(KingBaseEs)数据库操作手册
  • Flink+Paimon实时数据湖仓实践分享
  • w~深度学习~合集1
  • KVM 虚拟化
  • MONI后台管理系统-数据库设计
  • Rigol DP711自动控制--SCPI命令
  • 总结FastDFS的面试题
  • Fiddler 5.21.0 使用指南:过滤浏览器HTTP(S)流量下(四)
  • 【踩坑】pip安装依赖卡在Installing build dependencies ...
  • 【WRF-Urban】SLUCM新增空间分布城市冠层参数及人为热排放AHF代码详解(下)
  • 云桌面:云计算桌面
  • WPF+LibVLC开发播放器-音量控制和倍速控制
  • 数智运营一体化平台项目经营分享
  • 记录blender学习过程中遇到的问题
  • (八)腾讯cloudstudio+Stable-Diffusion-webui AI绘画教程-安装插件
  • 记一次跑前端老项目的问题
  • 深度学习:MindSpore自动并行
  • python拆分Excel文件
  • Python实现Excel中数据条显示
  • c#如何开发后端