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: 数据库操作;的更多相关文章

  1. 2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

     Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法參考博客:http://blog.csdn.net/tototuzuoquan ...

  2. qt 数据库操作总结

    #include <QtSql>QT += sql QSqlDatabase类实现了数据库连接的操作QSqlQuery类用来执行SQL语句QSqlRecord类 封装数据库所有记录 第一: ...

  3. 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 ...

  4. QT数据库操作

    浏览: 在QSqlQuery类中当执行exec()后会把指针放在记录集中第一个记录之上,所以需要调用QSqlQuery::next()来获取第一个数据,下面通过循环体来遍历所有表中的数据. while ...

  5. Qt数据库_资料

    1. QT笔记_数据库总结(一)-rojian-ChinaUnix博客.html http://blog.chinaunix.net/uid-28194872-id-3631462.html (里面有 ...

  6. Qt之操作数据库(SQLite)

    SQLite 简介 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需 ...

  7. qt 5 数据库操作(mysql)

    其实大家都知道,QT5以上的都自带了数据库驱动,所以呢,基本上可以直接使用,于是如果想知道怎么连接数据库,请参考这位大神写的.http://qtdebug.com/DB-AccessMySQL.htm ...

  8. Qt 多线程与数据库操作需要注意的几点问题(QSqlDatabase对象只能在当前线程里使用)

    彻底抛弃MFC, 全面应用Qt 已经不少时间了.除了自己看书按步就班做了十几个验证性的应用,还正式做了3个比较大的行业应用,总体感觉很好.Native C++ 下, Qt 基本是我用过的最简便的界面库 ...

  9. Qt 多线程与数据库操作需要注意的几点问题

    源地址:http://blog.csdn.net/goldenhawking/article/details/10811409 彻底抛弃MFC, 全面应用Qt 已经不少时间了.除了自己看书按步就班做了 ...

随机推荐

  1. Class.isAssignableFrom与instanceof的区别

    isAssignableFrom 假设有两个类Class1和Class2.Class1.isAssignableFrom(Class2)表示: 类Class1和Class2是否相同. Class1是否 ...

  2. js调用浏览器打印指定div内容

    --打印按钮事件 function printForm(){    var headstr = '<html xmlns:th="http://www.thymeleaf.org&qu ...

  3. 【公众号系列】SAP HANA和区块链

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]SAP HANA和区块链   写在 ...

  4. python3 多线程的使用

    示例1: import threadingfrom time import sleep class forThread(threading.Thread): def __init__(self, ev ...

  5. crontab 详细用法 定时任务

    转自:http://blog.chinaunix.net/uid-25785357-id-3434344.html   使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命 ...

  6. 歌曲的BPM (Beat Per Minute)--每分钟节拍数

    因为老爸喜欢跳舞,总让我帮他整理舞曲,一会儿要慢三,一会儿要慢四,一会儿又要快四....我真的分不清啊 我想啊,慢三,慢四这些应该是歌曲的节拍吧(后来得知专业术语叫BPM),于是就在网上搜看看能不能通 ...

  7. 转:[kipmi0]进程导致系统负载高

    最近一个用户这边服务器出现服务器负载很高的情况,原本正常是0.3~0.5左右  不正常的时候会达到3,重启机器就正常,开始以为是程序问题,后来在观察的时候把程序给杀掉了 然后重启,结果负载还是很高,于 ...

  8. 1.1 NCE21 Daniel Mendoza

    1.text translation Two hundred years ago, boxing matches were very popular in England. At that time/ ...

  9. 记一个bug

    就在刚刚,测试叫我去看一个问题,有用户反应,在业务页面,出现了一部分重复的内容,而且点击按钮弹窗里,出现了只有个title,没有body的情况. 事情的现象就是这样.然后我就开始着手找原因了.首先声明 ...

  10. ElasticSearch(九):elasticsearch-head插件安装

    安装node 安装elasticsearch-head需要node.js的支持. 下载最新的node.js,下载地址:https://nodejs.org/en/download/ 将下载后的安装包放 ...