由于工作安排,需要使用Mysql,平时都是使用的是Sqlserver,和Sqlite,而这次使用Mysql,着实有点不适应,所以这次把遇到的问题记录下来,希望可以帮到大家。
一、mysql的安装:
1,下载地址如下:
https://dev.mysql.com/downloads/mysql/
2,下载成功之后,解压,并在目录下创建my.ini文件,并将以下数据复制到该文件中。注意,basedir和datadir的路径按你自己的要求改一下。还有需要添加环境变量,就是该目录下的bin文件夹,比如:E:\mysql-8.0.23-winx64\bin。
[mysql]
default-character-set = utf8
[mysqld]
#端口
port = 3306
#mysql安装目录
basedir = E:/mysql-8.0.16-winx64
#mysql数据存放目录
datadir = E:/mysql-8.0.16-winx64/data
#允许最大连接数
max_connections = 1024
#允许连接失败的次数
max_connect_errors=10
#服务端默认使用字符集
character-set-server = utf8
#默认存储引擎
default-storage-engine = INNODB
3,用管理员方式运行cmd,依次输入如下命令:
mysqld --initialize-insecure
mysqld install
#如果原来安装过mysql,可以先remove;
mysqld -remove MySQL
net start mysql
#提示Mysql 服务已经启动成功,则表示Mysql已经部署成功了。
#测试mysql是否成功,输入如下命令,并回车,初始化时没有密码,直接回车即可:
mysql -u root -p
二,使用Mysql
1,设置mysql初始密码。
mysql -uroot -p '123456'
2,使用mysql,如果你对mysql的命令比较熟悉,可以直接使用命令,如果想使用可视化程序来连接和编辑mysql,推荐使用DBeaver,下载路径如下,它一个免费的软件,需要了解如何使用,可以百度一下,一款非常好用的软件。
https://dbeaver.io/
3,Qt 使用mysql,以下是测试代码:
static bool connectToMysql()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("table"); //这里输入你的数据库名
db.setUserName("root");
db.setPassword("123456"); //这里输入你的密码
if (!db.open()) {
QMessageBox::critical(0, QObject::tr("无法打开数据库"),
"无法创建数据库连接! ", QMessageBox::Cancel);
return false;
}
return true;
}
运行时,如果提示如下错误时,这个时候就需要填坑了,请继续往下看。
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
这个提示是未找到mysql的驱动了。你需要将第一步下载的mysql包里面的lib文件夹下的libmysql.dll库拷贝至C:\Qt\Qt5.9.4\5.9.4\msvc2015_64\bin,这个按自己的要求拷贝至指定目录下。然后,最好是重启一下Qt,再次运行测试代码,就可以解决上面这个问题了。
三,Qt发布程序
1,程序发布成功之后,在自己电脑上运行是肯定没有问题,那么如果将发布的程序运行要其他没有任何编程环境的电脑上时,就出现问题,它会提示应用程序无法运行,一般出现这种情况,就是缺少库,如果发布时Qt的库都关联上了,那么问题一定出在mysql上,可是不确定是缺哪个库,当然,libmysql.dll是必须要复制到发布程序的目录下的。网上有大佬说可以用一些辅助工具,我试了,没帮到我。直接告诉大家最快最有效的方法,将下载的mysql包里面的所有.dll库拷贝至发布程序目录下,这样就可以运行了。但是问题来了,把所有库拷贝进去了,肯定有一些不会使用到的库,怎么删掉呢,可以运行你发布之后的程序,然后删除与mysql相关的库,这个时候,由于程序占用了部分的库文件,被占用的文件是没法删掉的,而那些没被占用的就都删除了,留下了的就是需要的文件了。搞定!