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语句的使用;
略;
注: 该博文为扩展型;