经过两天的努力终于在我的笔记本上面把一个用QT+Mysql的东西做完了,此处主要是想记录一下我这两天遇到的几个很坑的地方,用一个小demo来进行演示,首先说一下我的配置,我电脑里面用的QT Creator 4.8.2,QT5.12.2的MSVC2017_64的kit编译,首先我想强调的第一个坑就是版本要搞对,首先安装mysql的时候要注意自己数据库的版本是多少,是否与qt的版本是对应的。然后就是要注意QT中的sqldriver文件夹中驱动dll是不是存在,如果不存在就需要重新编译生成一下dll文件,还有就是跟网上很多教程说的一样将mysql安装目录下的libmysql的dll文件和lib文件放到qt对应的编译器bin文件夹下,然后用windeployqt打包生成的exe,这样就最终完成了一个连接数据库的软件雏形,现在做完之后细细想来感觉其实也没有什么东西,就是一点小坑的地方需要记录下来,怕自己以后还会遇到同样的场景这样就避免了重蹈覆辙。
我先将大致步骤进行划分:
(1).安装QT(省略不谈)
(2).安装mySQL数据库,此前一直都是直接只安装mysql数据库然后连接的,用它自带的那个图形化数据库界面,由于本人比较菜,所以说用的非常难受,然后就换成了Navicat图形化界面,使用起来非常爽,我之后也会上传到我资源里面,有兴趣的可以去下载,具体的Mysql和Navicat的安装这里我不做过多的叙述,有问题的可以私聊我。
(3).QT和MYSQL数据库连接,安装完QT和MYSQL之后我们接下来就是进入正题,此处我用了两种方法来进行连接,一种是万金油ODBC数据源连接方式,还一种就是MYSQL driver进行连接,本人是不推荐使用ODBC方式来做,如果实在MYSQL驱动没有搞好那就用ODBC方式。
一.使用ODBC数据源连接方式。首先用qt创建一个demo工程,然后在Navicat界面中连接好MYSQL数据库并且新建一个数据库,命名为firstdatabase数据库
新建好数据库之后我们就先把qt工程里面的测试代码写好,
QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");
db.setHostName("localhost"); //主机名称,如localhost
db.setPort(3306); //数据库端口号
db.setDatabaseName("firstdatabase"); //数据库名称
db.setUserName("root"); //用户名称
db.setPassword("123456"); //用户密码
db.open();
if(db.isOpen())
{
QMessageBox::information(NULL, "Ok", "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
}
else
{
QMessageBox::information(NULL, "false", "No", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
}
QSqlQuery query(db);
query.exec("create table hello3(id bigint not null auto_increment,name varchar(255),age bigint,primary key (id))");
query.exec("insert into hello3(name, age) values('xiaoxi', 18)");
query.exec("insert into hello3(name, age) values('xiaonan', 19)");
query.exec("insert into hello3(name, age) values('xiaobei', 20)");
query.exec("insert into hello3(name, age) values('xiaodong', 21)");
这样的话QT工程里面的代码和MYSQL数据那边就全部弄好了,现在我们打开到控制面板
进入系统与安全之后然后滑到最下面选择管理工具
然后就可以看到ODBC数据源,根据自己需求选择32位或者64位
然后就可以进行系统DSN里面将MYSQL driver添加成功
配置的时候填一些信息,记住两个红框中的信息最好一致,填完之后点击test成功了就好了,这时候就可以运行demo程序通过了
运行QT工程之后的最终结果截图如下
不过这种万金油方法确实挺麻烦而且通用性不强,还是不推荐使用。
二.通过mysql driver方式进行连接数据库,这个方式特别需要注意的是别忘记把libmysql.dll和libmysql.lib这两个文件放置到对应编译器的bin文件夹以及自己qt的sqldriver下面是否有作为桥梁的dll驱动文件
这两个位置检查无误之后将代码中的连接方式改为QMYSQL就可以运行了,测试代码如下粘贴
QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost"); //主机名称,如localhost
db.setPort(3306); //数据库端口号
db.setDatabaseName("firstdatabase"); //数据库名称
db.setUserName("root"); //用户名称
db.setPassword("123456"); //用户密码
db.open();
if(db.isOpen())
{
QMessageBox::information(NULL, "Ok", "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
}
else
{
QMessageBox::information(NULL, "false", "No", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
}
QSqlQuery query(db);
query.exec("create table hello5(id bigint not null auto_increment,name varchar(255),age bigint,primary key (id))");
query.exec("insert into hello5(name, age) values('xiaoxi', 18)");
query.exec("insert into hello5(name, age) values('xiaonan', 19)");
query.exec("insert into hello5(name, age) values('xiaobei', 20)");
query.exec("insert into hello5(name, age) values('xiaodong', 21)");
最终测试运行结果粘贴如下,
至此数据库就连接完全成功并且也测试了添加表,并且修改表内容,基本上后续再根据实际需求进行添加功能即可。
相对于之前用的sqlSever来说,MYSQL确实太方便不过了,SQLSEVER太笨重了,我目前能够接触到的东西完全可以就用Mysql来做,而且还是开源的,对于我这种白嫖党来说很舒服。