Qt远程连接MySQL"/>
Qt远程连接MySQL
Qt操作MySQL原理
从下图可以看到,在应用程序和数据库之间有一个驱动程序ODBC,不同DBMS(数据库管理系统,如MySQL,Oracle…)负责完善其操作(增删改查…)的驱动,并将其交给ODBC管理,而应用程序只需调用ODBC提供的接口,就能实现对数据库进行增删改查的操作,Qt就属于应用程序。
连接步骤
牢记:32位对应32位,64位对应64位!!! Qt的编译套件位数=MySQL位数=ODBC位数
MySQL部分
修改用户(root)的访问权限
root用户默认只能从localhost访问,而我们要以root用户远程登陆数据库,就要修改host为“%”,让任何ip都能访问,同时授权root用户远程访问的权限。
修改host为“%”:
update user set host = '%' where user = 'root';
查看当前访问权限:
use mysql; ## 选择mysql数据库
select user,host from user; ## 查看用户访问端口
若看到root对应“%”,则修改成功
授权root用户远程登陆
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root_pwd'; ## 授权root远程登录 后面的root_pwd代表登录密码
记得刷新授权
FLUSH PRIVILEGES;
开放3306端口
- linux防火墙开放端口
ufw防火墙开放端口:
ufw allow 3306
firewall防火墙开放端口:
firewall-cmd --list-all #查看防火墙规则
firewall-cmd --permanent --add-port=3306/tcp #开放3306端口
- 云服务器开放端口
ODBC部分
安装ODBC驱动
安装ODBC驱动,值得注意的是ODBC要和Qt的位数(32/64)相同,不然会影响后续操作。
官网链接: ODBC官网
查看Qt版本:帮助->关于Qt
安装完后,ODBC数据源配置
Qt部分
连接Mysql代码如下:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");db.setHostName("服务器ip");db.setPort(3306);db.setDatabaseName("ODBC配置中填的Data base Name");db.setUserName("user");db.setPassword("password");bool ok = db.open();if (ok){QMessageBox::information(this, "infor", "success");}else {QMessageBox::information(this, "infor", "open failed");qDebug()<<"error open database because"<<db.lastError().text();}
连接成功!
也可以通过Mysql的驱动连接数据库,可以参考大丙老师的文章: Qt中编译数据库驱动
大丙老师讲得非常详细,这里主要记录自己遇到的坑
- Qt内可以连接数据库,程序打包后不行
问题分析:连接数据库需要使用libmysql.dll(位于Qt的bin目录下),因为Qt内运行会使用这个目录下的dll,而程序打包后运行不会去这个目录下查找。
解决办法:将libmysql.dll复制到打包文件的目录下
更多推荐
Qt远程连接MySQL
发布评论