一、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 创建数据库

    //! 输出可用数据库qDebug() << "Available drivers:";QStringList drivers = QSqlDatabase::drivers();for (int i = 0; i < drivers.size(); i++){qDebug()<<drivers[i];}//! 添加数据库驱动QSqlDatabase mySqlDB = QSqlDatabase::addDatabase("QMYSQL");//! 设置数据库名称mySqlDB.setDatabaseName("E:/work/qe/mytest1/database.db");//! 打开数据库if(!mySqlDB.open())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 创建一个表、插入及查询操作

#include <QCoreApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QString>
#include <QSqlRecord>
#include <QSqlDriver>
#include <QString>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//! 输出可用数据库qDebug() << "Available drivers:";QStringList drivers = QSqlDatabase::drivers();for (int i = 0; i < drivers.size(); i++){qDebug()<<drivers[i];}//! 添加数据库驱动QSqlDatabase mySqlDB = QSqlDatabase::addDatabase("QMYSQL");mySqlDB.setHostName("localhost");mySqlDB.setDatabaseName("web001");mySqlDB.setUserName("root");mySqlDB.setPassword("123456");mySqlDB.setPort(3306);//! 打开数据库if(!mySqlDB.open()){qDebug("Failed to connect to root mysql admin");return false;}//! 以下执行相关sql语句QSqlQuery mySqlQuery;//! 清空student表mySqlQuery.exec("drop table student");//! 新建student表,id设置为主键,还有一个name项mySqlQuery.exec("create table student (id int primary key, name varchar(20),course varchar(20))");//!批量导入QStringList strListStdName;strListStdName<<"wang bin"<<"xiao yu"<<"ye mei";QStringList strListStdCourse;strListStdCourse<<"Math"<<"English"<<"Computer";mySqlQuery.prepare("INSERT INTO student (id,name, course) ""VALUES (:id,:name, :course)");for (int i = 0; i < strListStdName.size(); i++){mySqlQuery.bindValue(":id",i);                         //! 加入主键mySqlQuery.bindValue(":name", strListStdName[i]);      //! 向绑定值里加入名字mySqlQuery.bindValue(":course", strListStdCourse[i]);  //! 课程mySqlQuery.exec();                                     //! 加入库中}//! 向表中插入1条数据mySqlQuery.bindValue(0,3);mySqlQuery.bindValue(1,"wang han");mySqlQuery.bindValue(2,"Chinese");mySqlQuery.exec();//! 查找表中id >=1 的记录的id项和name项的值mySqlQuery.exec("select * from student where id >= 0");//! query.next()指向查找到的第一条记录,然后每次后移一条记录QSqlRecord mySqlRec = mySqlQuery.record();while(mySqlQuery.next()){//! 获取query所指向的记录在结果集中的编号int nRowNum = mySqlQuery.at();//! 获取每条记录中属性(即列)的个数int nColumnNum = mySqlQuery.record().count();//! 获取"name"属性所在列的编号,列从左向右编号,最左边的编号为0int nFieldNo = mySqlQuery.record().indexOf("name");nFieldNo     = mySqlRec.indexOf("course");//! 获取id属性的值,并转换为int型int stud_id = mySqlQuery.value(0).toInt();//! 获取name属性的值QString stud_name = mySqlQuery.value(1).toString();//! 获取course属性的值QString stud_course = mySqlQuery.value(2).toString();//! 输出结果qDebug() << nRowNum << nColumnNum << nFieldNo << stud_id << stud_name << stud_course;}//! 定位到结果集中编号为2的记录,即第三条记录,因为第一条记录的编号为0qDebug() << "exec seek(2) :";if(mySqlQuery.seek(2)){qDebug() << "rowNum is : " << mySqlQuery.at()<< " id is : " << mySqlQuery.value(0).toInt()<< " name is : " << mySqlQuery.value(1).toString();}//! 定位到结果集中最后一条记录qDebug() << "exec last() :";if(mySqlQuery.last()){qDebug() << "rowNum is : " << mySqlQuery.at()<< " id is : " << mySqlQuery.value(0).toInt()<< " name is : " << mySqlQuery.value(1).toString();}return a.exec();}

输出结果:

参考资料:

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

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

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

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

Qt学习笔记之MySQL数据库相关推荐

  1. MySQL学习笔记 | 04 - MySQL数据库基本操作(增加、修改、删除、查看)

    MySQL学习笔记 | 01-为什么要使用数据库 MySQL学习笔记 | 02 - MySQL在Windows下的安装.配置.服务启动/停止.用户登录.查看版本号 MySQL学习笔记 | 03 - M ...

  2. 【学习笔记】MySQL数据库高级版 - 索引优化、慢查询、锁机制等

    本文是尚硅谷周阳(阳哥)老师的MySQL高级篇视频的学习笔记.由于视频比较老,所以在高版本的MySQL中索引的地方做了优化,和视频的内容不完全一样,不过大体一致.从第四节锁机制开始的部分还没有整理. ...

  3. 学习笔记(03):MySQL数据库运维与管理-01-mysql通用日志与错误日志

    立即学习:https://edu.csdn.net/course/play/10084/214943?utm_source=blogtoedu MYSQL日志管理 用于实现MYSQL数据库故障排查2, ...

  4. 学习笔记(02):MySQL数据库运维与管理-03-状态变量及查看方法

    立即学习:https://edu.csdn.net/course/play/10084/221706?utm_source=blogtoedu MySQL状态变量 作用:反映当前mysql数据库服务器 ...

  5. python连接mysql很慢 2.7_Python 2.7 学习笔记 访问mysql数据库

    一.基本概念 使用python操作数据库,其基本的流程如下(其实所有开发语言访问数据库的流程都是这样). 1.第一,引入相应数据库的python数据库接口模块,针对不同的数据库类型,有不同的数据库访问 ...

  6. QT学习笔记之MySql如何计算两个时间段相隔的天数

    写在前面 博主目前正在做毕设,已经快将前台用户预定的部分做完了,但是现在遇到了一个问题,那就是我如何去计算两个时间段之间隔了多少天呢?不然不好按日收费啊!(哦吼吼吼吼!!!) 解决办法 这个不需要我们 ...

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

    1. SQLite数据库介绍 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式 ...

  8. 学习笔记(07):MySQL数据库运维与管理-02-用户权限授予演示

    立即学习:https://edu.csdn.net/course/play/10084/221712?utm_source=blogtoedu 权限授予 授权语法 GRANT priv_type [( ...

  9. 学习笔记(06):MySQL数据库运维与管理-01-用户创建及授权

    立即学习:https://edu.csdn.net/course/play/10084/214945?utm_source=blogtoedu MYSQL用户权限管理 用于实现数据库安全访问,授权用户 ...

最新文章

  1. 法总统:英国若“无协议脱欧” 将成最大输家
  2. PL/pgSQL学习笔记之九
  3. 浅谈我对JCS 的理解
  4. 2020 年 3 月全国程序员工资排名!
  5. 将图片嵌入程序文件的一点研究
  6. java使用POST发送soap报文请求webservice返回500错误解析
  7. python数据可视化:使用dash给博客制作一个dashboard
  8. HiPrint-打印下载
  9. 股价屡创新高,发布会带来“十三香”,苹果还能躺赢?
  10. Widows Server 2012上无法安装.net framework 3.5
  11. python逻辑回归训练预测_[Python] 机器学习笔记 基于逻辑回归的分类预测
  12. SVN打标签方法及在此过程中的问题处理
  13. 成为互联网企业家的10个理由
  14. 最近最久未使用页面置换算法C语言,LRU页面置换算法模拟-最近最久未使用置换算法...
  15. Linux驱动学习-平台设备驱动probe函数-20220410
  16. 玲珑杯 1009 Spoon Devil's Bucket 矩阵优化DP
  17. 审计溯源 | IP-guard终端操作审计,助力高效防控泄密风险
  18. 关于编程学习的心态与方法
  19. 鸿蒙手机摄影,鸿蒙系统正式亮相 华为:手机随时可以使用
  20. matlab显示一幅图像

热门文章

  1. boost::statechart模块实现类型信息测试
  2. boost::python::detail::is_borrowed_ptr相关的测试程序
  3. boost::mpi模块实现测试mpi版本
  4. boost::kruskal_minimum_spanning_tree用法的测试程序
  5. GDCM:读取和打印DICOM的属性的测试程序
  6. DCMTK:DcmSpecificCharacterSet类的测试程序
  7. VTK:模型之Spring
  8. VTK:图片之RGBToHSV
  9. VTK:几何对象之PolyLine
  10. OpenGL point shadow点阴影的实例