Qt学习笔记之MySQL数据库
一、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数据库相关推荐
- MySQL学习笔记 | 04 - MySQL数据库基本操作(增加、修改、删除、查看)
MySQL学习笔记 | 01-为什么要使用数据库 MySQL学习笔记 | 02 - MySQL在Windows下的安装.配置.服务启动/停止.用户登录.查看版本号 MySQL学习笔记 | 03 - M ...
- 【学习笔记】MySQL数据库高级版 - 索引优化、慢查询、锁机制等
本文是尚硅谷周阳(阳哥)老师的MySQL高级篇视频的学习笔记.由于视频比较老,所以在高版本的MySQL中索引的地方做了优化,和视频的内容不完全一样,不过大体一致.从第四节锁机制开始的部分还没有整理. ...
- 学习笔记(03):MySQL数据库运维与管理-01-mysql通用日志与错误日志
立即学习:https://edu.csdn.net/course/play/10084/214943?utm_source=blogtoedu MYSQL日志管理 用于实现MYSQL数据库故障排查2, ...
- 学习笔记(02):MySQL数据库运维与管理-03-状态变量及查看方法
立即学习:https://edu.csdn.net/course/play/10084/221706?utm_source=blogtoedu MySQL状态变量 作用:反映当前mysql数据库服务器 ...
- python连接mysql很慢 2.7_Python 2.7 学习笔记 访问mysql数据库
一.基本概念 使用python操作数据库,其基本的流程如下(其实所有开发语言访问数据库的流程都是这样). 1.第一,引入相应数据库的python数据库接口模块,针对不同的数据库类型,有不同的数据库访问 ...
- QT学习笔记之MySql如何计算两个时间段相隔的天数
写在前面 博主目前正在做毕设,已经快将前台用户预定的部分做完了,但是现在遇到了一个问题,那就是我如何去计算两个时间段之间隔了多少天呢?不然不好按日收费啊!(哦吼吼吼吼!!!) 解决办法 这个不需要我们 ...
- Qt学习笔记之SQLITE数据库
1. SQLite数据库介绍 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式 ...
- 学习笔记(07):MySQL数据库运维与管理-02-用户权限授予演示
立即学习:https://edu.csdn.net/course/play/10084/221712?utm_source=blogtoedu 权限授予 授权语法 GRANT priv_type [( ...
- 学习笔记(06):MySQL数据库运维与管理-01-用户创建及授权
立即学习:https://edu.csdn.net/course/play/10084/214945?utm_source=blogtoedu MYSQL用户权限管理 用于实现数据库安全访问,授权用户 ...
最新文章
- 法总统:英国若“无协议脱欧” 将成最大输家
- PL/pgSQL学习笔记之九
- 浅谈我对JCS 的理解
- 2020 年 3 月全国程序员工资排名!
- 将图片嵌入程序文件的一点研究
- java使用POST发送soap报文请求webservice返回500错误解析
- python数据可视化:使用dash给博客制作一个dashboard
- HiPrint-打印下载
- 股价屡创新高,发布会带来“十三香”,苹果还能躺赢?
- Widows Server 2012上无法安装.net framework 3.5
- python逻辑回归训练预测_[Python] 机器学习笔记 基于逻辑回归的分类预测
- SVN打标签方法及在此过程中的问题处理
- 成为互联网企业家的10个理由
- 最近最久未使用页面置换算法C语言,LRU页面置换算法模拟-最近最久未使用置换算法...
- Linux驱动学习-平台设备驱动probe函数-20220410
- 玲珑杯 1009 Spoon Devil's Bucket 矩阵优化DP
- 审计溯源 | IP-guard终端操作审计,助力高效防控泄密风险
- 关于编程学习的心态与方法
- 鸿蒙手机摄影,鸿蒙系统正式亮相 华为:手机随时可以使用
- matlab显示一幅图像
热门文章
- boost::statechart模块实现类型信息测试
- boost::python::detail::is_borrowed_ptr相关的测试程序
- boost::mpi模块实现测试mpi版本
- boost::kruskal_minimum_spanning_tree用法的测试程序
- GDCM:读取和打印DICOM的属性的测试程序
- DCMTK:DcmSpecificCharacterSet类的测试程序
- VTK:模型之Spring
- VTK:图片之RGBToHSV
- VTK:几何对象之PolyLine
- OpenGL point shadow点阴影的实例