• Qt SQL的使用 MySQL


    SQL类分成三层:

    • 用户接口层:这些类提供了基于数据的窗口部件,这些窗口部件不仅连接数据库还可为用户所浏览。Qt设计器集成了这些类并可用来创建基于数据的窗体。这些窗口部件可以在程序中与C++代码直接交互。支持这一层的类包括:QSqlEditorFactory, QSqlForm, QSqlPropertyMap, QDataTable, QDataBrowser和QDataView。
    • SQL应用编程接口层:这些类存取数据库。QSqlDatabase类用来连接数据库,数据交互的实现要么使用QSqlQuery类以SQL语句来实现,要么用QSqlCursor类,它封装了SQL命令集。除了QSqlDatabase, QSqlCursor和QSqlQuery这些类外,QSqlError, QSqlField, QSqlIndex和QSqlRecord也支持该层。
    • 驱动程序层:本层由三个类组成:QSqlResult, QSqlDriver和QSqlDriverFactoryInterface。这个层在数据库和SQL类之间提供了底层的桥梁。这个层的文档是另外的,因为它只和驱动程序编写者有关,并且在标准数据库应用程序编程中很少用到。

    要在QT中使用SQL,首先需要包含sql模块:

    QT       += core gui sql

    可以先包含所要用到的头文件:

    1 #include <QSqlDatabase>
    2 #include <QDebug>
    3 #include <QMessageBox>
    4 #include <QSqlError>
    5 #include <QSqlQuery>

    用QSqlData::drivers()可以打印qt支持的数据库驱动:

    qDebug() << QSqlDatabase::drivers();

    当前支持的数据库如下:

    Qt: Untested Windows version 10.0 detected!
    ("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")

    我们使用的是MySQL数据库,所以先添加MySQL数据库:

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    然后连接本地数据库,这个表需要自己建,如果本地没有数据库则弹出个MessageBox,提示打开数据库失败:

     1 //连接数据库
     2     db.setHostName("127.0.0.1");   //数据库服务器ip
     3     db.setUserName("root");        //数据库用户名
     4     db.setPassword("123456");      //密码
     5     db.setDatabaseName("info");    //使用哪个数据库
     6 
     7     //打开数据库
     8     if(!db.open())
     9     {
    10         QMessageBox::warning(this, "错误", db.lastError().text());
    11         return;
    12     }

    往数据库里插入数据我们使用QSqlQuery类,它支持MySQL语句:

    1 //插入
    2 QSqlQuery query;
    3 query.exec("");  //sql语句

    增(insert)

    向数据库插入数据我们有不同的风格:

    odbc风格

     1 //批量插入
     2 //? 相当于点位符
     3 query.prepare("insert into student(name, age, score) value(?, ?, ?)");
     4 
     5 //给字段设置内容 list
     6 QVariantList nameList;
     7 nameList << "xiaoming" << "xiaolong" << "xiaojiang";
     8 QVariantList ageList;
     9 ageList << 11 << 22 << 33;
    10 QVariantList scoreList;
    11 scoreList << 59 << 69 << 79;
    12 
    13 //给字段绑定相应的值 按顺序绑定
    14 query.addBindValue(nameList);
    15 query.addBindValue(ageList);
    16 query.addBindValue(scoreList);
    17 
    18 //执行预处理命令
    19 query.execBatch();

    oracle风格

     1 //占位符 : + 自定义名字
     2 query.prepare("insert into student(name, age, score) value(:name, :age, :score)");
     3 
     4 //给字段设置内容 list
     5 QVariantList nameList;
     6 nameList << "xiaom" << "xiao" << "xiang";
     7 QVariantList ageList;
     8 ageList << 11 << 22 << 33;
     9 QVariantList scoreList;
    10 scoreList << 89 << 91 << 99;
    11 
    12 //给字段绑定
    13 query.bindValue(":name", nameList);
    14 query.bindValue(":score", scoreList);
    15 query.bindValue(":age", ageList);
    16 
    17 //执行预处理命令
    18 query.execBatch();

     1 //
     2 query.exec("select * from student");
     3 
     4 while(query.next()) //一行一行遍历
     5 {
     6     //取出当前行的内容
     7     //以列为单位的
     8     query.value(0).toInt();      //第0列
     9     query.value(1).toString();
    10     query.value("age").toInt();  //直接放字段名字也可以
    11     query.value("score").toInt();
    12 }
  • 相关阅读:
    我的死党前同事 料
    相信缘份吗?我所见所闻的测试工程师
    多线程基础【面试题形式】
    kafka学习(五)Spring Boot 整合 Kafka
    kafka学习(四)kafka安装与命令行调用
    J2EE的13个规范总结
    Spring Boot学习(四)常用注解
    kafka学习(三)kafka生产者,消费者详解
    dubbo学习(十一)dubbo知识点总结
    MyBatis学习(三)日志输出环境配置
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14366629.html
Copyright © 2020-2023  润新知