• 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

  • 相关阅读:
    maven基本配置
    spring mvc统一异常处理
    HBase介绍
    在 Windows 上安装 Hadoop 教程(转)
    Xshell利用登录脚本从服务器登录到另外一个服务器
    Windows平台下安装Eclipse插件,开发Hadoop应用
    如何编译Apache Hadoop2.2.0源代码
    oracle表空间表分区详解及oracle表分区查询使用方法(转+整理)
    javadoc相关问题
    Linux压缩与解压常用命令
  • 原文地址:https://www.cnblogs.com/gaohongchen01/p/4533966.html
Copyright © 2020-2023  润新知