接上一篇的续写:

前文提到"最终写一个demo的my sql工程  发现可以成功运行,但是找不到 创建的数据库文件 原因再查找"

注意 上面这个问题对应的代码是如下的:

#include <QDebug>
#include <QSqlDatabase>
#include <QSqlQuery>

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    //    db.setDatabaseName("my.db");
    db.setHostName("localhost");
    db.setPort(3306);
    db.setDatabaseName("datatest");
    db.setUserName("root");
    db.setPassword("123456");
    if (!db.open()) {
        qDebug()<<"create database failed";
    } else {
        qDebug()<<"create database success";
    }

    QSqlQuery query(db);
    query.exec("create table student (id primariy key, name varchar(20))");
    query.exec("insert into student values(1, 'wangli')");
    query.exec("select * from student");
    while (query.next()) {
        qDebug()<<"id:"<<query.value(0).toInt()<<" name:"<<query.value(1).toString();
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

 

问题的原因是: 

query.exec("create table student (id primariy key, name varchar(20))");  
这一行代码 现在是正确的
之前错误的写法是
query.exec("create table student (id primariy key, name vchar(20))");



这一个小问题,导致我一直以为公司电脑的配置qt开发环境无法使用mysql 数据库,导致我整整纠结了两天。
这里记录我在qt中使用mysql 针对这个问题的分析过程:
<1>首先我写一个demo 列出安装的qt5.5.0版本里支持的所有sql drivers,发现里面有MYSQL 窃喜,以为可以像使用sqlite那样使用mysql
<2>实际上按照网上的操作,先下载mysql 然后迫不及待地写代码验证 发现还是不能用 debug目录下没有XXX.db文件生成,纠结了很久,最后发现mysql是没有XXX.db文件的
<3>然后自己手动编译mysql 插件 N遍了, 我一直以“DEBUG目录下是否有XXX.db文件” 作为mysql是否OK 这个是错误的,下面继续说
<4>我怀疑是下载的mysql版本的问题, 位数问题, 安装路径有空格和中文的问题 qt对应的版本和位数问题, 最终还看博客,有人提出qt 5.5 mysql的源码有问题,最终没结果
<5>最终用家里的电脑,win7系统 一样的qt版本,按照如下的就好了

这里作一个小总结:
<1>qt中使用mysql数据库的方法是:qt比较老的版本 需要自己手动编译mysql 插件 参见我在上一篇博客里的链接
<2>我现在用的qt是5.5.0 里面是可以直接使用mysql数据库的, 直接一句话就是 “将mysql安装目录中的libmysql.dll文件拷贝到QT安装目录下的bin目录中就可以了”
我的电脑上就是 将D:\mysql\lib\libmysql.dll 注意 这里D:\mysql目录是 mysql安装的目录 拷贝到 C:\Qt\Qt5.5.0\5.5\mingw492_32\bin 下面去
<3>由于qt中是在字符串里写sql语句的,很多时候,sql语句出错也不会有明显的提示,所以只能 在终端里 测试自己编写的数据库语句没有问题,才能发到代码里,否则问题很难追查






下面写一下使用mysql的详细过程:
<1>到mysql官网下载一个mysql版本
具体就是community->Downloads-> 选择一个版本 我选的是如下的

下载好了安装  在D盘创建一个mysql目录   点击msi文件,将其安装到创建的目录下,这里设置密码为 123456  端口保持默认 3306 不变  安装完了如下


然后将lib下面的libmysql.dll拷贝到 C:\Qt\Qt5.5.0\5.5\mingw492_32\bin目录下

 



好了,接下来可以在qt中使用mysql数据库了。

<2> 用法示例:
将mysql路径加入环境变量 D:\mysql\bin 加入环境变量 运行终端 输入 mysql -u root -p 输入密码 123456 如下

 






代码就是上面工程里使用的代码:
<1>首先用命令行登录mysql 创建了一个数据库名字叫做 datatest
<2>代码里连接到这个数据库,并且创建了一个表 student 并且插入了一条记录 代码里查询这条记录 是OK的
<3>在命令行里查询这条记录也是OK的 参见上面的截图
<4>我以为在qt工程的编译目录下, 也会生成一个 datatest 这个数据库文件名 结果一看 什么也没有

 

不应该啊 (以我用sqlite的经验,这个目录下不用应该有一个datatest的文件吗?  mysql数据库文件去哪里了?)   参见命令行的最后一条截图 
执行 show variables like '%datadir%';  找到了路径在


 


到此 使用mysql 完成了,注意 这里只是动态的 使用 还有静态编译QT程序呢? 静态编译中如何使用mysql 下一篇讲