Qt数据库操作

摘要:
QtSql模块由驱动层、SQL接口层和用户接口层组成。它提供了一个独立于平台和数据库类型访问SQL数据库的接口。该接口由一组类支持,这些类使用Qt的模型/视图结构集成了数据库和用户界面。数据库是模型的数据源。Qt使用驱动程序与各种数据库应用程序编程接口进行通信。下面主要介绍Qt在模型视图结构中对MySQL数据库的操作。

  QtSql模块由驱动层、SQL接口层、用户接口层三部分组成,提供了与平台以及数据库种类无关的访问SQL数据库的接口。这个接口由利用Qt的模型/视图结构将数据库与用户界面集成的一套类来支持,数据库即模型的数据源。对于习惯使用SQL语法的用户,QSqlQuery类提供了直接执行任意SQL语句并处理返回结果的方法;而对于习惯使用较高层数据库接口避免使用SQL语句的用户,QSqlTableModel和QSqlRelationModel类提供了合适的抽象。

  Qt使用驱动程序与各种数据库的应用编程接口进行通信。Qt的桌面版包含的驱动程序有:QSQLITE、QMYSQL、QODBC等。

  对数据库的操作主要包括:连接、增、删、改、查等。

  下面主要讲解Qt在模型(QSqlTableModel)-视图(QTableView)结构下对MySQL数据库的操作 ( 对于使用SQL类的应用程序,要在.pro文件中添加 QT += sql )。

1、连接

  此操作我在我的上一篇博文http://www.cnblogs.com/gaohongchen01/p/4530765.html中已讲述。

QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("ghcDB");
db.setUserName("root");
db.setPassword("123456");
if(!db.open()) { qDebug()<<db.lastError().text()<<endl; return false; }

2、增

QSqlTableModel *modelTable=new QSqlTableModel(this);
modelTable->setTable(strTableName);
modelTable->select();
int row=modelTable->rowCount();
modelTable
->insertRows(row,1); modelTable->setData(modelTable->index(row,0),addDataDlg.editName->text()); if(""==addDataDlg.comboSex->currentText()) modelTable->setData(modelTable->index(row,1),"M"); if(""==addDataDlg.comboSex->currentText()) modelTable->setData(modelTable->index(row,1),"F"); modelTable->setData(modelTable->index(row,2),addDataDlg.editAge->text());
modelTable->submitAll();

3、删

QSqlTableModel *modelTableInfoOldSelected=new QSqlTableModel(this); 
modelTableInfoOldSelected
->setTable(strTableName);
modelTableInfoOldSelected
->select();

modelTableInfoOldSelected
->removeRows(rowSelected,1);

modelTableInfoOldSelected
->submitAll();

4、改

QSqlTableModel *modelTable=new QSqlTableModel(this);
modelTable->setTable(strTableName);
modelTable->select();

int row=rowSelected;
modelTable
->setData(modelTable->index(row,0),changeDataDlg.editName->text()); if(""==changeDataDlg.comboSex->currentText()) modelTable->setData(modelTable->index(row,1),"M"); if(""==changeDataDlg.comboSex->currentText()) modelTable->setData(modelTable->index(row,1),"F"); modelTable->setData(modelTable->index(row,2),changeDataDlg.editAge->text());
modelTable->submitAll();

5、查

QSqlQueryModel *modelQuery=new QSqlQueryModel;
modelQuery->setQuery(tr("select Name,Sex,Age from %1").arg(strTableName));
modelQuery
->setHeaderData(0,Qt::Horizontal,tr("姓名")); modelQuery->setHeaderData(1,Qt::Horizontal,tr("性别")); modelQuery->setHeaderData(2,Qt::Horizontal,tr("年龄"));
tableView
->setModel(modelQuery);

6、读取数据库某一条记录中各字段的值给控件

QSqlTableModel *modelTableInfoOldSelected=new QSqlTableModel(this); 
modelTableInfoOldSelected->setTable(strTableName); 
modelTableInfoOldSelected->select();

QSqlRecord record=modelTableInfoOldSelected->record(rowSelected);

editName->setText(record.value("Name").toString());
if("M"==record.value("Sex").toString())
    comboSex->setCurrentIndex(0);
else if("F"==record.value("Sex").toString())
    comboSex->setCurrentIndex(1);
editAge->setText(record.value("Age").toString());

参考连接:http://blog.csdn.net/light1028/article/details/8164476

免责声明:文章转载自《Qt数据库操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL行列转换问题:C#控制台程序参数;结果:设置与读取C#控制台应用程序Main函数中的参数args下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql 修改字符集

1: 在Mysql的配置文件 my.ini (一般在c:/windows/下面) 里加上服务器的默认编码配置: default-character-set=utf82: 修改你的数据库的字符编码:进入Mysql数据库,通过命令修改你的数据库字符编码: ALTER DATABASE `databaseName` DEFAULT CHARACTER SET u...

CentOS系统中基于Apache+php+mysql的许愿墙网站的搭建

1.首先,我们需要两台虚拟机(CentOS7,Linux文本)。 2.给两台虚拟机配置网络环境分别为桥接模式 CentOS7 ip为192.168.100.137、24,linux文本ip为192.168.100.237/24,然后各自配置yum源配置文件(http://www.cnblogs.com/zxbdbk/p/6020679.html)。 3.给...

mysql:mysql安装及一些配置和图形界面介绍

关于mysql,我使用的不多,这次记录是在学习一位大牛的demo的契机下完成的。包括前面记录到的sqlserver的一些知识点,也是在新的项目组中协助时候学习记录的。希望通过记录加深印象和帮助后来者。 言归正传: 一、安装版的mysql 1.数据库版本:mysql 5.6 (网上有资源)我的安装目录 2.图形化界面:这个在网上搜索的话,会有一大堆介绍,在这...

服务器内存溢出问题

系统测试时,导出、下载功能,偶尔会出现“out of memory”(内存溢出)问题。 内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。 引起内存溢出的原因有很多种,常见的有以下几种:1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;2.集合类中有对对象的引用,使用完后未清空,使得...

Mybatis查询在数据库中有但在代码中没有

代码是这样的: HashMap<String, Object> param = new HashMap<String, Object>(); param.put("ystJg", ystJg); List<xtglbm> ystjg = bd.getYstJg(param); Mapper是这样的 <select...

Linux搭建主从数据库服务器(主从复制)

配置主机数据库: 1.克隆linux操作系统             2.修改Linux系统主机IP地址   主机IP:192.168.247.150   从机IP:192.168.247.151        3.通过xshell连接Master 连接主机IP:ssh 192.168.247.150   这里有可能连接失败。   方案一:将虚拟机的网络适...