• Qt: 数据库操作;


    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语句的使用;

    略;

     

    注: 该博文为扩展型;

  • 相关阅读:
    一只特立独行的猪
    每天写出好代码的5个建议
    电脑修好了
    VB编程修改AutoCAD长度型尺寸标注
    前天我放学回家
    VB编程修改AutoCAD坐标型尺寸标注
    VB编程操作AutoCAD尺寸标注样式
    这是一个错误的程序
    2011年6月27日星期二
    2011年6月20日星期一
  • 原文地址:https://www.cnblogs.com/yinwei-space/p/10419041.html
Copyright © 2020-2023  润新知