yafeilinux 发表于 2017-6-16 11:46:10

第22篇 Qt5之数据库(二)安装MySQL数据库

版权声明
该文章原创于Qt开源社区(www.qter.org),作者yafeilinux,转载请注明出处!


导语

MySQL是一个非常流行的关系型数据库,也是使用标准的SQL语言进行数据库的操作。在Qt 5中已经提供了对MySQL数据库的默认支持,要想使用该数据库,需要先进行数据库的安装,这里我们介绍下在Windows系统中MySQL数据库的安装和简单使用。后面篇章中会使用SQLite作为默认数据库进行讲解,其中的内容对于MySQL数据库也是适用的。

环境:Windows 7 + Qt 5.8.0(包含Qt Creator 4.2.1)

正文

一、安装MySQL
1、从http://www.qter.org/portal.php?mod=view&aid=10下载MySQL安装包,具体文件为mysql-5.6.10-win32,如下图所示。


2、运行下载的安装包,首先出现的是向导欢迎界面。如下图所示。单击“Next”按钮。



3、该界面选择同意条款。如图所示。单击“Next”按钮。




(4)下面选择定制安装“Custom”。



(5)这里需要安装所有的头文件和库,点击Development Components前面的下拉箭头,然后选择第二项。


(6)然后选择下面的“Browse…”按钮来更改安装路径,这里设置为C:\MySQL\。




(7)填写完路径后单击“OK”按钮回到主页面,单击“Next”按钮来到新的页面,这里单击“Install”按钮开始安装。。



(8)等安装完毕后,点击“Finish”按钮完成安装。




2.在MySQL中创建数据库
(1)下面先在安装的MySQL中创建一个数据库,用于后面的测试。首先到MyQSL的安装目录C:\MySQL\bin目录下运行mysqld.exe程序,该程序运行完成后会自动关闭。




(2)同时按下键盘上的Win图标和R键,在弹出的对话框中输入cmd。



(3)进入终端后输入下面的命令:
cd C:\MySQL\bin
      跳转到安装目录下。

(4)然后输入下面的命令:
mysql –uroot –p
      使用root用户来登陆MySQL,因为默认密码是空的,所以这里不用设置密码。运行这行代码会提示Enter password,这时敲回车即可。



(5)登录MySQL以后,使用下面的命令来查看现有的数据库:
show databases;
      注意后面有个分号。



(6)可以看到,这里现在已经有几个数据库了,它们是MySQL需要的。



(7)这里不使用已经有的数据库,而是新建自己的数据库,下面新建名为mydata的数据库:
create database mydata;




(8)再次查看已经存在的数据库,发现显示出了刚才创建的数据库。


(9)完成后,输入exit命令退出MySQL。

二、测试MySQL程序
1、打开Qt Creator,新建项目,模板选择为“Qt Console Application”,项目名称为“mysqltest”。完成后在mysqltest.pro文件中添加如下代码:
QT += sql
      然后按下Ctrl+S保存该文件。

2、更改main.cpp文件内容如下。
#include <QCoreApplication>#include <QSqlDatabase>#include <QDebug>#include <QSqlQuery>
int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);
    // 打开MySQL    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");    db.setHostName("localhost");    db.setDatabaseName("mydata");    db.setUserName("root");    db.setPassword("");    if (!db.open())      qDebug() << "Failed to connect to root mysql admin";    else qDebug() << "open";
    QSqlQuery query(db);
    //注意这里varchar一定要指定长度,不然会出错    query.exec("create table student(id int primary key,name varchar(20))");
    query.exec("insert into student values(1,'xiaogang')");    query.exec("insert into student values(2,'xiaoming')");    query.exec("insert into student values(3,'xiaohong')");
    query.exec("select id,name from student where id >= 2");
    while(query.next())    {      int value0 = query.value(0).toInt();      QString value1 = query.value(1).toString();      qDebug() << value0 << value1 ;    }
    return a.exec();}

      这里注意,创建表时varchar一定要指定长度。
到C:\MySQL\lib中将libmysql.dll文件复制到C:\Qt\Qt5.8.0\5.8\mingw53_32\bin中。运行程序。




结语

这一篇只是介绍了一下MySQL数据库的安装流程和在Qt中的简单使用,只是为了便于需要使用该数据库的读者快速上手。对于不需要使用该数据库的同学,可以跳过本篇,直接学习下面的内容。

源码:
返回主目录


蹇治鹏 发表于 2017-6-16 18:38:35

我第一次按照你的步骤走的时候,在输入密码那里直接会车
提示ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
我想可能是我MySql服务没有开,结果去服务界面发现没有这个服务
于是我在cmd中bin目录下执行:mysqld.exe -install
提示:Install/Remove of the Service Denied
之后我用管理员身份运行cmd:mysqld.exe -install
提示:Service successfully installed.
这服务中才出现MySQL服务;
开启后,再按照你的步骤执行,结果和你的一致。
但在QT里面执行你给出的代码时结果不一致。
所以前来请教。
PS:上面两张图片是SQL和QT运行截图

yafeilinux 发表于 2017-6-19 00:41:47

蹇治鹏 发表于 2017-6-16 18:38
我第一次按照你的步骤走的时候,在输入密码那里直接会车
提示ERROR 2003 (HY000): Can't connect to MySQL...

到C:\MySQL\lib中将libmysql.dll文件复制到C:\Qt\Qt5.8.0\5.8\mingw53_32\bin中

这个步骤做了没。

285049001 发表于 2017-6-26 21:01:51

请问一下,,,qt 写入MySQL ,英文正常插入,中文却不能(数据库没任何变化),,,
将 insert 语句放到sql控制台却可以执行,想问下是怎么回事

yafeilinux 发表于 2017-6-28 16:58:23

285049001 发表于 2017-6-26 21:01
请问一下,,,qt 写入MySQL ,英文正常插入,中文却不能(数据库没任何变化),,,
将 insert 语句放到sq ...

例如:

// 使数据库支持中文
    query.exec("SET NAMES 'Latin1'");

    // 创建course表
    query.exec("create table course (id int primary key, "
                     "name varchar(20), teacher varchar(20))");
    query.exec("insert into course values(0, '数学', '刘老师')");

285049001 发表于 2017-6-29 08:33:23

yafeilinux 发表于 2017-6-28 16:58
例如:

// 使数据库支持中文


已经解决了,应该是字符串编码的问题,谢谢老师

kangyang94 发表于 2017-7-19 14:53:08

yafeilinux 发表于 2017-6-19 00:41
到C:\MySQL\lib中将libmysql.dll文件复制到C:\Qt\Qt5.8.0\5.8\mingw53_32\bin中

这个步骤做了没。 ...

老师,您好。
我将libmysql.dll复制到C:\Qt\Qt5.8.0\5.8\msvc2015_64\bin目录中后,运行程序仍是QSqlDatabase: QMYSQL driver not loaded,请问一下是怎么回事

yafeilinux 发表于 2017-7-22 11:09:39

kangyang94 发表于 2017-7-19 14:53
老师,您好。
我将libmysql.dll复制到C:\Qt\Qt5.8.0\5.8\msvc2015_64\bin目录中后,运行程序仍是QSqlData ...

你用的是msvc版本的?

kangyang94 发表于 2017-7-23 13:40:34

yafeilinux 发表于 2017-7-22 11:09
你用的是msvc版本的?

嗯嗯,已经解决,MySQL位数与qt位数不一致的原因,谢谢老师

LBB_CQU 发表于 2017-8-16 17:23:06

老师请问msvc版遇到QSqlDatabase: MYSQL driver not loaded该怎么办啊?

yafeilinux 发表于 2017-8-16 23:42:19

LBB_CQU 发表于 2017-8-16 17:23
老师请问msvc版遇到QSqlDatabase: MYSQL driver not loaded该怎么办啊?

这个有很多原因啊,看下mysql安装是否可用,自己的dll文件是否进行了复制。

LBB_CQU 发表于 2017-8-17 12:20:36

yafeilinux 发表于 2017-8-16 23:42
这个有很多原因啊,看下mysql安装是否可用,自己的dll文件是否进行了复制。 ...

呃老师我网上有的各种方法都已经试了,而且我用python也可以连上,唯独Qt不可以,已经弄了一下午了,查了很多资料,觉得可能是Qt的问题。

yafeilinux 发表于 2017-8-20 21:50:56

LBB_CQU 发表于 2017-8-17 12:20
呃老师我网上有的各种方法都已经试了,而且我用python也可以连上,唯独Qt不可以,已经弄了一下午了,查了 ...

什么系统啊!

风一样的季节 发表于 2017-9-4 15:48:55

285049001 发表于 2017-6-29 08:33
已经解决了,应该是字符串编码的问题,谢谢老师

请问一下是怎么解决的呢?试过很多方法了,输入数据库后,数据库查看还是乱码

风一样的季节 发表于 2017-9-4 15:51:42

yafeilinux 发表于 2017-6-28 16:58
例如:

// 使数据库支持中文


老师,你好,我按照你给方法,输入到数据库后,在数据库查看,中文还是显示乱码?请问下怎么个办呢?

yafeilinux 发表于 2017-9-4 21:12:29

风一样的季节 发表于 2017-9-4 15:51
老师,你好,我按照你给方法,输入到数据库后,在数据库查看,中文还是显示乱码?请问下怎么个办呢? ...

什么数据库,什么系统。

风一样的季节 发表于 2017-9-4 23:00:09

本帖最后由 风一样的季节 于 2017-9-4 23:12 编辑

yafeilinux 发表于 2017-9-4 21:12
什么数据库,什么系统。
MySQL数据库,win10系统,在QT5.8 msvc编译器中,本来是中文数据都输入不了数据库,但是在MySQL控制台中是能够输入的,然后按照老师给出的方案,能输入中文,但是显示乱码。从数据库中读出来的中文数据也是乱码。

yafeilinux 发表于 2017-9-6 22:39:42

风一样的季节 发表于 2017-9-4 23:00
MySQL数据库,win10系统,在QT5.8 msvc编译器中,本来是中文数据都输入不了数据库,但是在MySQL控制台中是 ...

win10系统没有测试过,最好先去网上搜索下相关解决方案。

风一样的季节 发表于 2017-9-7 08:55:51

yafeilinux 发表于 2017-9-6 22:39
win10系统没有测试过,最好先去网上搜索下相关解决方案。

老师,那win7系统怎么解决,我试一下。

yafeilinux 发表于 2017-9-7 22:50:18

风一样的季节 发表于 2017-9-7 08:55
老师,那win7系统怎么解决,我试一下。

可以直接用吧,我这里一直没有出过问题。
页: [1] 2
查看完整版本: 第22篇 Qt5之数据库(二)安装MySQL数据库