zoukankan      html  css  js  c++  java
  • Qt数据库操作

      QtSql模块由驱动层、SQL接口层、用户接口层三部分组成,提供了与平台以及数据库种类无关的访问SQL数据库的接口。这个接口由利用Qt的模型/视图结构将数据库与用户界面集成的一套类来支持,数据库即模型的数据源。对于习惯使用SQL语法的用户,QSqlQuery类提供了直接执行任意SQL语句并处理返回结果的方法;而对于习惯使用较高层数据库接口避免使用SQL语句的用户,QSqlTableModel和QSqlRelationModel类提供了合适的抽象。

      Qt使用驱动程序与各种数据库的应用编程接口进行通信。Qt的桌面版包含的驱动程序有:QSQLITE、QMYSQL、QODBC等。

      对数据库的操作主要包括:连接、增、删、改、查等。

      下面主要讲解Qt在模型(QSqlTableModel)-视图(QTableView)结构下对MySQL数据库的操作 ( 对于使用SQL类的应用程序,要在.pro文件中添加 QT += sql )。

    1、连接

      此操作我在我的上一篇博文http://www.cnblogs.com/gaohongchen01/p/4530765.html中已讲述。

    QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("ghcDB");
    db.setUserName("root");
    db.setPassword("123456");
    if(!db.open()) { qDebug()<<db.lastError().text()<<endl; return false; }

    2、增

    QSqlTableModel *modelTable=new QSqlTableModel(this);
    modelTable->setTable(strTableName);
    modelTable->select();
    int row=modelTable->rowCount();
    modelTable
    ->insertRows(row,1); modelTable->setData(modelTable->index(row,0),addDataDlg.editName->text()); if(""==addDataDlg.comboSex->currentText()) modelTable->setData(modelTable->index(row,1),"M"); if(""==addDataDlg.comboSex->currentText()) modelTable->setData(modelTable->index(row,1),"F"); modelTable->setData(modelTable->index(row,2),addDataDlg.editAge->text());
    modelTable->submitAll();

    3、删

    QSqlTableModel *modelTableInfoOldSelected=new QSqlTableModel(this); 
    modelTableInfoOldSelected
    ->setTable(strTableName);
    modelTableInfoOldSelected
    ->select();

    modelTableInfoOldSelected
    ->removeRows(rowSelected,1);

    modelTableInfoOldSelected
    ->submitAll();

    4、改

    QSqlTableModel *modelTable=new QSqlTableModel(this);
    modelTable->setTable(strTableName);
    modelTable->select();
    
    int row=rowSelected;
    modelTable
    ->setData(modelTable->index(row,0),changeDataDlg.editName->text()); if(""==changeDataDlg.comboSex->currentText()) modelTable->setData(modelTable->index(row,1),"M"); if(""==changeDataDlg.comboSex->currentText()) modelTable->setData(modelTable->index(row,1),"F"); modelTable->setData(modelTable->index(row,2),changeDataDlg.editAge->text());
    modelTable->submitAll();

    5、查

    QSqlQueryModel *modelQuery=new QSqlQueryModel;
    modelQuery->setQuery(tr("select Name,Sex,Age from %1").arg(strTableName));
    modelQuery
    ->setHeaderData(0,Qt::Horizontal,tr("姓名")); modelQuery->setHeaderData(1,Qt::Horizontal,tr("性别")); modelQuery->setHeaderData(2,Qt::Horizontal,tr("年龄"));
    tableView
    ->setModel(modelQuery);

    6、读取数据库某一条记录中各字段的值给控件

    QSqlTableModel *modelTableInfoOldSelected=new QSqlTableModel(this); 
    modelTableInfoOldSelected->setTable(strTableName); 
    modelTableInfoOldSelected->select();
    
    QSqlRecord record=modelTableInfoOldSelected->record(rowSelected);
    
    editName->setText(record.value("Name").toString());
    if("M"==record.value("Sex").toString())
        comboSex->setCurrentIndex(0);
    else if("F"==record.value("Sex").toString())
        comboSex->setCurrentIndex(1);
    editAge->setText(record.value("Age").toString());

    参考连接:http://blog.csdn.net/light1028/article/details/8164476

  • 相关阅读:
    Thinkphp5 对接百度云对象存储 BOS (上传、删除)
    php 删除富文本编辑器保存内容中的其他代码(保留中文)
    ffmreg thinkphp 控制器 获取音频视频详细信息(获取时长)
    selenium+testng+java+poi进行excel的数据参数化
    linux中磁盘配额管理
    linux中挂载和卸载文件系统
    linux中vi编辑器的练习
    Linux基础命令
    Nginx流量复制
    Python脚本
  • 原文地址:https://www.cnblogs.com/gaohongchen01/p/4533966.html
Copyright © 2011-2022 走看看