Qt数据库操作

  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

原文地址:https://www.cnblogs.com/gaohongchen01/p/4533966.html