找回密码
 立即注册
收起左侧

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

23
回复
17695
查看
[复制链接]
累计签到:1564 天
连续签到:1 天
来源: 2017-6-16 11:46:10 显示全部楼层 |阅读模式
版权声明


该文章原创于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

1http://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中的简单使用,只是为了便于需要使用该数据库的读者快速上手。对于不需要使用该数据库的同学,可以跳过本篇,直接学习下面的内容。


源码:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
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运行截图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

累计签到:1564 天
连续签到:1 天
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中

这个步骤做了没。
回复 支持 反对

使用道具 举报

累计签到:5 天
连续签到:1 天
2017-6-26 21:01:51 显示全部楼层
请问一下,,,qt 写入MySQL ,英文正常插入,中文却不能(数据库没任何变化),,,
将 insert 语句放到sql控制台却可以执行,想问下是怎么回事
回复 支持 反对

使用道具 举报

累计签到:1564 天
连续签到:1 天
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, '数学', '刘老师')");
回复 支持 反对

使用道具 举报

累计签到:5 天
连续签到:1 天
2017-6-29 08:33:23 显示全部楼层
yafeilinux 发表于 2017-6-28 16:58
例如:

// 使数据库支持中文

已经解决了,应该是字符串编码的问题,谢谢老师
回复 支持 反对

使用道具 举报

累计签到:18 天
连续签到:1 天
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,请问一下是怎么回事
回复 支持 反对

使用道具 举报

累计签到:1564 天
连续签到:1 天
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版本的?
回复 支持 反对

使用道具 举报

累计签到:18 天
连续签到:1 天
2017-7-23 13:40:34 显示全部楼层
yafeilinux 发表于 2017-7-22 11:09
你用的是msvc版本的?

嗯嗯,已经解决,MySQL位数与qt位数不一致的原因,谢谢老师
回复 支持 反对

使用道具 举报

累计签到:22 天
连续签到:1 天
2017-8-16 17:23:06 显示全部楼层
老师请问msvc版遇到QSqlDatabase: MYSQL driver not loaded该怎么办啊?
回复 支持 反对

使用道具 举报

累计签到:1564 天
连续签到:1 天
2017-8-16 23:42:19 显示全部楼层
LBB_CQU 发表于 2017-8-16 17:23
老师请问msvc版遇到QSqlDatabase: MYSQL driver not loaded该怎么办啊?

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

使用道具 举报

累计签到:22 天
连续签到:1 天
2017-8-17 12:20:36 显示全部楼层
yafeilinux 发表于 2017-8-16 23:42
这个有很多原因啊,看下mysql安装是否可用,自己的dll文件是否进行了复制。 ...

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

使用道具 举报

累计签到:1564 天
连续签到:1 天
2017-8-20 21:50:56 显示全部楼层
LBB_CQU 发表于 2017-8-17 12:20
呃老师我网上有的各种方法都已经试了,而且我用python也可以连上,唯独Qt不可以,已经弄了一下午了,查了 ...

什么系统啊!
回复 支持 反对

使用道具 举报

累计签到:6 天
连续签到:1 天
2017-9-4 15:48:55 显示全部楼层
285049001 发表于 2017-6-29 08:33
已经解决了,应该是字符串编码的问题,谢谢老师

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

使用道具 举报

累计签到:6 天
连续签到:1 天
2017-9-4 15:51:42 显示全部楼层
yafeilinux 发表于 2017-6-28 16:58
例如:

// 使数据库支持中文

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

使用道具 举报

累计签到:1564 天
连续签到:1 天
2017-9-4 21:12:29 显示全部楼层
风一样的季节 发表于 2017-9-4 15:51
老师,你好,我按照你给方法,输入到数据库后,在数据库查看,中文还是显示乱码?请问下怎么个办呢? ...

什么数据库,什么系统。
回复 支持 反对

使用道具 举报

累计签到:6 天
连续签到:1 天
2017-9-4 23:00:09 显示全部楼层
本帖最后由 风一样的季节 于 2017-9-4 23:12 编辑
yafeilinux 发表于 2017-9-4 21:12
什么数据库,什么系统。

MySQL数据库,win10系统,在QT5.8 msvc编译器中,本来是中文数据都输入不了数据库,但是在MySQL控制台中是能够输入的,然后按照老师给出的方案,能输入中文,但是显示乱码。从数据库中读出来的中文数据也是乱码。
回复 支持 反对

使用道具 举报

累计签到:1564 天
连续签到:1 天
2017-9-6 22:39:42 显示全部楼层
风一样的季节 发表于 2017-9-4 23:00
MySQL数据库,win10系统,在QT5.8 msvc编译器中,本来是中文数据都输入不了数据库,但是在MySQL控制台中是 ...

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

使用道具 举报

累计签到:6 天
连续签到:1 天
2017-9-7 08:55:51 显示全部楼层
yafeilinux 发表于 2017-9-6 22:39
win10系统没有测试过,最好先去网上搜索下相关解决方案。

老师,那win7系统怎么解决,我试一下。
回复 支持 反对

使用道具 举报

累计签到:1564 天
连续签到:1 天
2017-9-7 22:50:18 显示全部楼层
风一样的季节 发表于 2017-9-7 08:55
老师,那win7系统怎么解决,我试一下。

可以直接用吧,我这里一直没有出过问题。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了