Qt: 数据库操作;
QT的数据库操作有两种方式: 一) 使用QsqlTableModel类, 可以配合QTableView进行界面显示并进行数据库操作,
这种方法比较方便快捷; 二) 使用原始SQL语言, 利用INSERT, UPDATE, SELECT, DELETE实现插入,更新,查询,删除功能;
1) QSqlTableModel类的使用;
QSqlDatabase db; //数据库要打开;
QString szTable = "test"; //数据表名;
m_pSqlTableModel = new QSqlTableModel(this, db); // bind tableView;
m_pSqlTableModel->setEditStrategy(QSqlTableModel::OnManualSubmit); //有三种编写模式;
m_pSqlTableModel->setTable(szTable); //指定数据表;
m_pSqlTableModel->setFilter("id = 1"); //where条件;
m_pSqlTableModel->select(); //相当于SQL语言 select;
1、添加记录;
int nRowNum = m_sqlTableModel->rowCount(); //记录数;
QSqlRecord record = m_sqlTableModel->record(); //
m_sqlTableModel->setRecord(nRowNum, record);
if( !m_sqlTableModel->submitAll() )
{
qDebug() <<"submit error";
}
2、修改记录;
QSqlTableModel *pMode = dynamic_cast<QSqlTableModel *>(ui->tableView->model());
pMode->database().transaction(); //开始事务操作
if (pMode->submitAll()) // 提交所有被修改的数据到数据库中
{
pMode->database().commit(); //提交成功,事务将真正修改数据库数据
} else {
pMode->database().rollback(); //提交失败,事务回滚
QMessageBox::warning(this, tr("tableModel"),tr("数据库错误: %1").arg(pMode->lastError().text()));
}
pMode->revertAll(); //撤销修改
3、查询记录;
m_pSqlTableModel->setFilter("id= 1");
m_pSqlTableModel->select(); //查询;
4、删除记录;
// 实现多行删除; 删除的关键函数 removeRow
QItemSelectionModel *pSelectModel = ui->tableView->selectionModel();
QModelIndexList indexList = pSelectModel->selectedIndexes(); //被选择的;
QMap<int,int>rowMap;
foreach (QModelIndex index, indexList)
{
if(! index.isValid()) return;
if(index.column()!=0) continue;
rowMap.insert(index.row(),0);
}
QMapIterator<int,int> rowMapIterator(rowMap); //如果要删除多行, 直接一行一行的删除会出现位置的移动, 这里通过将所有的要删除的行保存起来,按照从后往前的方法进行删除, 这样就解决了位置移动导致的删除错误;
rowMapIterator.toBack();
while(rowMapIterator.hasPrevious())
{
rowMapIterator.previous();
int rowm=rowMapIterator.key();
m_pSqlTableModel->removeRow(rowm);
}
m_pSqlTableModel->submitAll();
m_pSqlTableModel->select();
QItemSelectionModel是QTableView的选取封装类,通过该类可以方便的获取当前选取的区域;
2) 原始SQL语句的使用;
略;
注: 该博文为扩展型;
Qt: 数据库操作;的更多相关文章
- 2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理
Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法參考博客:http://blog.csdn.net/tototuzuoquan ...
- qt 数据库操作总结
#include <QtSql>QT += sql QSqlDatabase类实现了数据库连接的操作QSqlQuery类用来执行SQL语句QSqlRecord类 封装数据库所有记录 第一: ...
- Qt数据库操作(qt-win-commercial-src-4.3.1,VC6,Oracle,SQL Server)
qt-win-commercial-src-4.3.1.qt-x11-commercial-src-4.3.1Microsoft Visual C++ 6.0.KDevelop 3.5.0Window ...
- QT数据库操作
浏览: 在QSqlQuery类中当执行exec()后会把指针放在记录集中第一个记录之上,所以需要调用QSqlQuery::next()来获取第一个数据,下面通过循环体来遍历所有表中的数据. while ...
- Qt数据库_资料
1. QT笔记_数据库总结(一)-rojian-ChinaUnix博客.html http://blog.chinaunix.net/uid-28194872-id-3631462.html (里面有 ...
- Qt之操作数据库(SQLite)
SQLite 简介 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需 ...
- qt 5 数据库操作(mysql)
其实大家都知道,QT5以上的都自带了数据库驱动,所以呢,基本上可以直接使用,于是如果想知道怎么连接数据库,请参考这位大神写的.http://qtdebug.com/DB-AccessMySQL.htm ...
- Qt 多线程与数据库操作需要注意的几点问题(QSqlDatabase对象只能在当前线程里使用)
彻底抛弃MFC, 全面应用Qt 已经不少时间了.除了自己看书按步就班做了十几个验证性的应用,还正式做了3个比较大的行业应用,总体感觉很好.Native C++ 下, Qt 基本是我用过的最简便的界面库 ...
- Qt 多线程与数据库操作需要注意的几点问题
源地址:http://blog.csdn.net/goldenhawking/article/details/10811409 彻底抛弃MFC, 全面应用Qt 已经不少时间了.除了自己看书按步就班做了 ...
随机推荐
- TreeView 节点拖拽
public Form1() { InitializeComponent(); treeView1.AllowDrop = true; treeView1.ItemDrag += new ItemDr ...
- 如何设置Oracle数据库客户端字符集以及系统中的NLS_LANG环境变量
概述: 本地化是系统或软件运行的语言和文化环境.设置NLS_LANG环境参数是规定Oracle数据库软件本地化行为最简单的方式. NLS_LANG参数不但指定了客户端应用程序和Oracle数据库所使用 ...
- C#中@的作用
1.在书写文件路径时,消除"/"的转义功能 string FileDirect = "C:\Text\Debug\Text.txt"; \\编译会报错 stri ...
- Hadoop的NullWritable
NullWritable是Writable的一个特殊类,实现方法为空实现,不从数据流中读数据,也不写入数据,只充当占位符,如在MapReduce中,如果你不需要使用键或值,你就可以将键或值声明为Nul ...
- spring中基于注解使用AOP
本文内容:spring中如何使用注解实现面向切面编程,以及如何使用自定义注解. 一个场景 比如用户登录,每个请求发起之前都会判断用户是否登录,如果每个请求都去判断一次,那就重复地做了很多事情,只要是有 ...
- Linux内存都去哪了:(1)分析memblock在启动过程中对内存的影响
关键词:memblock.totalram_pages.meminfo.MemTotal.CMA等. 最近在做低成本方案,需要研究一整块RAM都用在哪里了? 最直观的的就是通过/proc/meminf ...
- 再看ExpressionTree,Emit,反射创建对象性能对比
[前言] 前几日心血来潮想研究着做一个Spring框架,自然地就涉及到了Ioc容器对象创建的问题,研究怎么高性能地创建一个对象.第一联想到了Emit,兴致冲冲写了个Emit创建对象的工厂.在做性能测试 ...
- Entity Framework Core系列之DbContext(修改)
上一篇我们介绍了Entity Framework Core系列之DbContext(添加),这一篇我们介绍下修改数据 修改实体的方法取决于context是否正在跟踪需要修改的实体. 下面的示例中实体由 ...
- 软件工程(FZU2015) 赛季得分榜,第11回合(beta冲刺+SE总结)
SE_FZU目录:1 2 3 4 5 6 7 8 9 10 11 12 13 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分:beta30分 团队项目分=团队得分+个人贡献分 个人 ...
- offsetof(s,m)解析
https://www.cnblogs.com/jingzhishen/p/3696293.html sizeof()用法汇总 sizeof()功能:计算数据空间的字节数1.与strlen()比较 ...