11数据库

SQL模块概述

QSqlTableModel的使用

可读可写

BLOB(binary large object),二进制大对象,是一个可以存储二进制文件的容器

//如果需要自定义代理,则需要自己写一个继承自QStyledItemDelegate的类
//QT += sql
#include    <QtSql>
#include    <QDataWidgetMapper>

//打开数据库
QSqlDatabase DB=QSqlDatabase::addDatabase("QSQLITE"); //添加 SQL LITE数据库驱动
DB.setDatabaseName(DBFile); //设置数据库名称
DB.open();
QSqlTableModel  *tabModel=new QSqlTableModel(this,DB);//数据模型
tabModel->setTable("employee"); //设置数据表
tabModel->setEditStrategy(QSqlTableModel::OnManualSubmit);//数据保存方式
tabModel->setSort(tabModel->fieldIndex("empNo"),Qt::AscendingOrder); //排序
tabModel->setHeaderData(tabModel->fieldIndex("empNo"),Qt::Horizontal,"工号");//只是设置表头为工号
//创建界面组件与数据模型的字段之间的数据映射
QDataWidgetMapper* dataMapper=new QDataWidgetMapper(); //数据映射
dataMapper->setModel(tabModel);//设置数据模型
dataMapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);

//界面组件与tabModel的具体字段之间的联系
dataMapper->addMapping(ui->dbSpinEmpNo,tabModel->fieldIndex("empNo"));

//获取所有字段名称
QSqlRecord  emptyRec=tabModel->record();//获取空记录,只有字段名
QSqlRecord  curRec=tabModel->record(curRecNo); //获取当前记录
QByteArray data=curRec.value("Photo").toByteArray();
QPixmap pic;
pic.loadFromData(data);

tabModel->insertRow(tabModel->rowCount(),QModelIndex()); //在末尾添加一个记录
QModelIndex curIndex=tabModel->index(tabModel->rowCount()-1,0);//创建最后一行的ModelIndex
tabModel->setData(tabModel->index(currow,2),"男");
// 插入行时设置缺省值,需要在primeInsert()信号里去处理

//插入记录
QModelIndex curIndex=ui->tableView->currentIndex();
tabModel->insertRow(curIndex.row(),QModelIndex());

tabModel->revertAll();//取消修改
bool res=tabModel->submitAll();//保存修改
tabModel->isDirty();////有未保存修改时可用

//删除当前记录
QModelIndex curIndex=theSelection->currentIndex();//获取当前选择单元格的模型索引
tabModel->removeRow(curIndex.row()); //删除最后一行
 tabModel->setSort(ui->comboFields->currentIndex(),Qt::AscendingOrder);//升序
tabModel->setFilter(" Gender='男' ");

QSqlQueryModel的使用

只能读,不能写

#include    <QtSql>
#include    <QDataWidgetMapper>
QSqlDatabase  DB=QSqlDatabase::addDatabase("QSQLITE");//数据库
DB.setDatabaseName(aFile); //设置数据库名称
DB.open();
QSqlQueryModel  *qryModel=new QSqlQueryModel(this); //数据模型
qryModel->setQuery("SELECT * FROM employee ORDER BY empNo");
qryModel->lastError().isValid();//出错
ui->tableView->setModel(qryModel);

QSqlQuery的使用

QSqlQuery query; //查询当前empNo的Memo和Photo字段的数据
query.prepare("select EmpNo, Memo, Photo from employee where EmpNo = :ID");
query.bindValue(":ID",empNo);//将empNo值付给:ID 变量绑定
query.exec();
query.first();
QVariant va=query.value("Photo");
qryModel->query().exec();//数据模型重新查询数据,更新tableView显示

QString sqlStr=qryModel->query().executedQuery();//执行过的SELECT语句
qryModel->setQuery(sqlStr);//重新查询数据

QSqlRelationalTableModel

QSqlRelationalTableModel  *tabModel=new QSqlRelationalTableModel(this,DB);//数据模型
//设置代码字段的查询关系数据表
tabModel->setRelation(3,QSqlRelation("departments","departID","department")); //设置第3列的关联数据  p1:关联哪个表 p2:外键 p3:显示关联表中的那个列

ion(3,QSqlRelation(“departments”,“departID”,“department”)); //设置第3列的关联数据 p1:关联哪个表 p2:外键 p3:显示关联表中的那个列

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值