Qt学习笔记之MySQL数据库

绝地灬酷狼 2023-07-05 14:53 299阅读 0赞

一、MySQL概述

MySQL是一个关系型数据库管理系统**,**由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

二、MySQL安装

下载MySQL 安装包,下载地址。

安装过程:超详细MySQL安装及基本使用教程

也可以使用phpstudy来安装MySQL

windows端5款mysql客户端工具:

1)MySQL Workbench

这属于mysql官方出品,免费,功能强大,是首选。

2)HeidiSQL

免费,功能强大,强烈推荐。

3)dbForge Studio for MySQL

收费软件

4)Navicat for MySQL

这个确实是好用,就是价格有点贵。

5)SQLyog

收费软件,贵。

三、Qt操作MySQL数据库

3.1 创建数据库

  1. //! 输出可用数据库
  2. qDebug() << "Available drivers:";
  3. QStringList drivers = QSqlDatabase::drivers();
  4. for (int i = 0; i < drivers.size(); i++){
  5. qDebug()<<drivers[i];
  6. }
  7. //! 添加数据库驱动
  8. QSqlDatabase mySqlDB = QSqlDatabase::addDatabase("QMYSQL");
  9. //! 设置数据库名称
  10. mySqlDB.setDatabaseName("E:/work/qe/mytest1/database.db");
  11. //! 打开数据库
  12. if(!mySqlDB.open())
  13. return false;

Qt连接MySQL的时候提示“QSqlDatabase: QMYSQL driver not loaded”问题,原因有如下两个:
1)缺少libmysql.dll 文件
解决办法是从 MySQL\lib中将 libmysql.dll 文件复制D:\Qt\Qt5.7.1\5.7\msvc2015_64\bin中

2)Qt Creator与MySQL位数不统一
如果上面的方法试过了还是不行那么应该是你安装的MySQL和QT的位数不同,可以打开MySQL控制台
输入show variables like ‘%version_%’;即可查看MySql位数。

2.2 创建一个表、插入及查询操作

  1. #include <QCoreApplication>
  2. #include <QDebug>
  3. #include <QSqlDatabase>
  4. #include <QSqlQuery>
  5. #include <QString>
  6. #include <QSqlRecord>
  7. #include <QSqlDriver>
  8. #include <QString>
  9. int main(int argc, char *argv[])
  10. {
  11. QCoreApplication a(argc, argv);
  12. //! 输出可用数据库
  13. qDebug() << "Available drivers:";
  14. QStringList drivers = QSqlDatabase::drivers();
  15. for (int i = 0; i < drivers.size(); i++){
  16. qDebug()<<drivers[i];
  17. }
  18. //! 添加数据库驱动
  19. QSqlDatabase mySqlDB = QSqlDatabase::addDatabase("QMYSQL");
  20. mySqlDB.setHostName("localhost");
  21. mySqlDB.setDatabaseName("web001");
  22. mySqlDB.setUserName("root");
  23. mySqlDB.setPassword("123456");
  24. mySqlDB.setPort(3306);
  25. //! 打开数据库
  26. if(!mySqlDB.open()){
  27. qDebug("Failed to connect to root mysql admin");
  28. return false;
  29. }
  30. //! 以下执行相关sql语句
  31. QSqlQuery mySqlQuery;
  32. //! 清空student表
  33. mySqlQuery.exec("drop table student");
  34. //! 新建student表,id设置为主键,还有一个name项
  35. mySqlQuery.exec("create table student (id int primary key, name varchar(20),course varchar(20))");
  36. //!批量导入
  37. QStringList strListStdName;
  38. strListStdName<<"wang bin"<<"xiao yu"<<"ye mei";
  39. QStringList strListStdCourse;
  40. strListStdCourse<<"Math"<<"English"<<"Computer";
  41. mySqlQuery.prepare("INSERT INTO student (id,name, course) "
  42. "VALUES (:id,:name, :course)");
  43. for (int i = 0; i < strListStdName.size(); i++)
  44. {
  45. mySqlQuery.bindValue(":id",i); //! 加入主键
  46. mySqlQuery.bindValue(":name", strListStdName[i]); //! 向绑定值里加入名字
  47. mySqlQuery.bindValue(":course", strListStdCourse[i]); //! 课程
  48. mySqlQuery.exec(); //! 加入库中
  49. }
  50. //! 向表中插入1条数据
  51. mySqlQuery.bindValue(0,3);
  52. mySqlQuery.bindValue(1,"wang han");
  53. mySqlQuery.bindValue(2,"Chinese");
  54. mySqlQuery.exec();
  55. //! 查找表中id >=1 的记录的id项和name项的值
  56. mySqlQuery.exec("select * from student where id >= 0");
  57. //! query.next()指向查找到的第一条记录,然后每次后移一条记录
  58. QSqlRecord mySqlRec = mySqlQuery.record();
  59. while(mySqlQuery.next())
  60. {
  61. //! 获取query所指向的记录在结果集中的编号
  62. int nRowNum = mySqlQuery.at();
  63. //! 获取每条记录中属性(即列)的个数
  64. int nColumnNum = mySqlQuery.record().count();
  65. //! 获取"name"属性所在列的编号,列从左向右编号,最左边的编号为0
  66. int nFieldNo = mySqlQuery.record().indexOf("name");
  67. nFieldNo = mySqlRec.indexOf("course");
  68. //! 获取id属性的值,并转换为int型
  69. int stud_id = mySqlQuery.value(0).toInt();
  70. //! 获取name属性的值
  71. QString stud_name = mySqlQuery.value(1).toString();
  72. //! 获取course属性的值
  73. QString stud_course = mySqlQuery.value(2).toString();
  74. //! 输出结果
  75. qDebug() << nRowNum << nColumnNum << nFieldNo << stud_id << stud_name << stud_course;
  76. }
  77. //! 定位到结果集中编号为2的记录,即第三条记录,因为第一条记录的编号为0
  78. qDebug() << "exec seek(2) :";
  79. if(mySqlQuery.seek(2))
  80. {
  81. qDebug() << "rowNum is : " << mySqlQuery.at()
  82. << " id is : " << mySqlQuery.value(0).toInt()
  83. << " name is : " << mySqlQuery.value(1).toString();
  84. }
  85. //! 定位到结果集中最后一条记录
  86. qDebug() << "exec last() :";
  87. if(mySqlQuery.last())
  88. {
  89. qDebug() << "rowNum is : " << mySqlQuery.at()
  90. << " id is : " << mySqlQuery.value(0).toInt()
  91. << " name is : " << mySqlQuery.value(1).toString();
  92. }
  93. return a.exec();
  94. }

输出结果:

20200215232626946.png

参考资料:

  1. Qt5开发学习总结(五)——Qt5 使用 MySQL 数据库及简单应用

  2. 第22篇 数据库(二)编译MySQL数据库驱动

  3. 44.QT-安装MySQL、测试连接MySQL

  4. Qt学习笔记之SQLITE数据库

发表评论

表情:
评论列表 (有 0 条评论,299人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Qt学习笔记数据库

    一、数据库简介 1.1.数据和数据库(DB) 用计算机进行数据处理,首先就要把信息以数据形式存储到计算机中,故数据是可以被计算机接受和处理的符号。根据所表示的信息特

    相关 Qt学习笔记QTranslator

    QTranslator类为文本输出提供国际化支持。 此类的一个对象包含一组从源语言到目标语言的转换。QTranslator提供了在翻译文件中查找翻译的功能。翻译文件是使用Qt

    相关 Qt学习笔记QTextCodec

    QTextCodec类提供了文本编码之间的转换。Qt使用Unicode来存储、绘制和操作字符串。在许多情况下,您可能希望处理使用不同编码的数据。例如,大多数日本文档仍然存储在S