QT中如何使用MYSQL 以及静态编译QT中如何加上MYSQL
Posted wangli1392781
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT中如何使用MYSQL 以及静态编译QT中如何加上MYSQL相关的知识,希望对你有一定的参考价值。
接上一篇的续写:
前文提到"最终写一个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 下一篇讲
以上是关于QT中如何使用MYSQL 以及静态编译QT中如何加上MYSQL的主要内容,如果未能解决你的问题,请参考以下文章
如何在VS2015中使用PostgreSQL插件静态编译Qt 5.8
Qt 如何编译成可执行程序,像VC的静态编译,可以在脱离QT的环境中运行
如何在 静态编译的QT 5.5.1 中 使用数据库插件连接 ODBC(调用静态插件)