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

略;

 

注: 该博文为扩展型;

转载于:https://www.cnblogs.com/yinwei-space/p/10419041.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值