天天看点

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



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

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

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

                                                  图1  后台测试数据库

继续阅读