Qt的Mysql数据库表操作(2)

时间:2021-12-03 10:56:43



Qt的MySQL数据库表操作(1)中,我们讲了QSqlDatabase,QSqlQuery等类的常见使用方法,接下来,我们主要讲其它几个常用数据库操作类的使用:

        QSqlTableModel类继承至QSqlQueryModel类,该类提供了一个可读写单张SQL表的可编辑数据模型,功能:修改,插入,删除,查询,和排序

1、常用函数

QVariant headerData (int section,Qt::Orientation orientation,int role = Qt::DisplayRole ) const  获取水平头或垂直头标题

bool setHeaderData ( int section,Qt::Orientation orientation,const QVariant & value,int role = Qt::EditRole ) 设置水平头或垂直头标题

int rowCount ( const QModelIndex & parent=QModelIndex() ) const // 返回行数

int columnCount ( const QModelIndex &index =QModelIndex() ) const // 返回列数

virtual bool removeColumns ( int column,int count, const QModelIndex & parent = QModelIndex() )//model->removeColumns (0)删除第一列

bool QSqlTableModel::submitAll (),//提交所有被修改的数据,然后修改的数据被保存在数据库中

void QSqlTableModel::revertAll ()  //撤销所有的修改,如果数据库已经被提交了修改,就不能通过撤销修改改回来了

virtual void revertRow ( int row ) //恢复指定行的改变

void QSqlTableModel::setFilter ( constQString & filter )  //筛选,按照字符串filter对数据库进行筛选,相当于SQL中的WHERE语句

bool QSqlTableModel::select ()  //在筛选和排序的条件下,将数据库中符合要求的在mode表格中显示出来

void QSqlTableModel::setSort ( int column,Qt::SortOrder order ) //排序操作。按照列和Qt::SortOrder排序。Qt::SortOrder有升序和降序

bool insertRow ( int row, const QModelIndex& parent = QModelIndex() )  //插入行

bool insertColumn ( int column, constQModelIndex & parent =QModelIndex() ) // 插入列

model->setEditStrategy(QSqlTableModel::OnManualSubmit);  //设置保存策略为手动提交

2、结合其它组件的数据库操作实例

[cpp] view plain copy print?Qt的Mysql数据库表操作(2)Qt的Mysql数据库表操作(2)
  1. void UserManager::BuildCmtable()  
  2. {  
  3.   
  4.     model = new QSqlTableModel;  
  5.     model->setTable("admin");  
  6.     model->setEditStrategy(QSqlTableModel::OnManualSubmit);  
  7. //    QString str ='1,5';  
  8. //    model->setFilter(tr("LIMIT '%1'").arg(str));  
  9.     model->select(); //选取整个表的所有行  
  10.     ui->tableView->setModel(model);  
  11.   
  12.     ui->tableView->setColumnWidth(0, 150);  
  13.     ui->tableView->setColumnWidth(1, 150);  
  14.     ui->tableView->setColumnWidth(2, 150);  
  15.     ui->tableView->setColumnWidth(3, 150);  
  16.     ui->tableView->setColumnWidth(4, 150);  
  17.     ui->tableView->setColumnWidth(5, 150);  
  18.     QSqlQuery query;  
  19.   
  20. }  
Qt的Mysql数据库表操作(2)
3、利用数据模型实现增删改查,排序
[cpp] view plain copy print?Qt的Mysql数据库表操作(2)Qt的Mysql数据库表操作(2)
  1. //新增用户  
  2. void UserManager::Adduser()  
  3. {  
  4.     int rowNum = model->rowCount(); //获得表的行数  
  5.     int id = 10;  
  6.     model->insertRow(rowNum); //添加一行  
  7.     model->setData(model->index(rowNum,0),id);  
  8.     model->submitAll(); //可以直接提交  
  9. }  
  10.   
  11. //删除用户  
  12. void UserManager::Delline()  
  13. {  
  14.     int curRow = ui->tableView->currentIndex().row();  
  15.     //获取选中的行  
  16.     model->removeRow(curRow);  
  17.     //删除该行  
  18.     int ok = QMessageBox::warning(this,tr("删除当前行!"),tr("你确定删除当前行吗?"),QMessageBox::Yes,QMessageBox::No);  
  19.     if(ok == QMessageBox::No)  
  20.     {  
  21.        model->revertAll(); //如果不删除,则撤销  
  22.     }  
  23.     else{  
  24.        model->submitAll(); //否则提交,在数据库中删除该行  
  25.     }  
  26. }  
  27.   
  28. //修改用户信息  
  29. void UserManager::Modefy()  
  30. {  
  31.     model->database().transaction(); //开始事务操作  
  32.     if (model->submitAll()) {  
  33.         model->database().commit(); //提交  
  34.     } else {  
  35.         model->database().rollback(); //回滚  
  36.         QMessageBox::warning(this, tr("tableModel"),tr("数据库错误:%1").arg(model->lastError().text()));  
  37.     }  
  38. }  
  39.   
  40. //查找用户  
  41. void UserManager::Search()  
  42. {  
  43.   
  44.    QString name;  
  45.    model->setFilter(QObject::tr("name = '%1'").arg(name));  
  46.    model->select(); //显示结果  
  47. }  
  48.   
  49. //用户信息降序  
  50. void UserManager::Jsort()  
  51. {  
  52.     model->setSort(0,Qt::DescendingOrder);  
  53.     model->select();  
  54. }  
  55. //用户信息升序  
  56. void UserManager::Ssort()  
  57. {  
  58.     model->setSort(0,Qt::AscendingOrder); //id属性,即第0列,升序排列  
  59.     model->select();  
  60.   
  61. }  
Qt的Mysql数据库表操作(2)

4.综合实例演示效果如下图1所示:

Qt的Mysql数据库表操作(2)

                                                  图1  后台测试数据库