zoukankan      html  css  js  c++  java
  • QT中如何使用MYSQL 以及静态编译QT中如何加上MYSQL(2)

     接上一篇的续写:

    前文提到"最终写一个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:mysqlliblibmysql.dll 注意 这里D:mysql目录是 mysql安装的目录 拷贝到 C:QtQt5.5.05.5mingw492_32in 下面去
    <3>由于qt中是在字符串里写sql语句的,很多时候,sql语句出错也不会有明显的提示,所以只能 在终端里 测试自己编写的数据库语句没有问题,才能发到代码里,否则问题很难追查






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

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


    然后将lib下面的libmysql.dll拷贝到 C:QtQt5.5.05.5mingw492_32in目录下



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

    <2> 用法示例:
    将mysql路径加入环境变量 D:mysqlin 加入环境变量 运行终端 输入 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 下一篇讲


  • 相关阅读:
    ***CSS3 Gradient渐变色(转:http://www.w3cplus.com/content/css3-gradient)
    CSS3实现边框锯齿效果
    css3超炫8种loading加载特效
    CSS3:Transition属性详解
    WebApp之Meta标签
    css3渐变色
    转:CSS设置滚动条样式
    使用Composer安装 Laravel 和 ThinkPHP
    laravel 数据库迁移
    sublime text 3 常用插件和配置
  • 原文地址:https://www.cnblogs.com/lifeng-blog/p/9162556.html
Copyright © 2011-2022 走看看