1 Qt 连接本地 MySQL 的方法 (Win)
1.1 前期准备
1.1.1 MySQL 安装
1.1.2 新建试验用的数据库和表
根据需要,自行新建数据库并添加数据
1 | create database neuralinfo; |
1.1.3 ODBC 安装
- 官网下载 根据指示安装即可
打开 ODBC 64
添加用户 DSN,根据实际情况填写即可
1.2 Qt 连接数据库
这里,我们写了一个登录页面来试验 MySQL 的连接
1.2.1 UI
- 主窗口如图,输入框均为 LineEdit
用户名和口令正确,点击 Login 会进入子窗口,子窗口为空白窗口
1.2.2 源码逻辑
https://github.com/woopokyuk/qtLogin
pro 文件中需要 QT+=sql
必要头文件
1
2
3连接与语句执行方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29qDebug() << QSqlDatabase::drivers();
ui->passwdLineEdit->setEchoMode(QLineEdit::Password);
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setDatabaseName("Neural"); // ODBC 中数据源的名称,不是 MySQL 中数据库的名称
db.setUserName("root");
db.setPassword("0000"); // 数据库登录密码
db.open();
if (!db.open()) {
qDebug() << "db not open";
return;
}
QString passwd = ui->passwdLineEdit->text();
QString sqlLine = "SELECT * FROM users WHERE user_passwd=" + passwd;
QSqlQuery result = db.exec(sqlLine); // 执行 MySQL 语句
QString userNameInSql = "";
while (result.next()) {
userNameInSql = result.value("user_name").toString();
qDebug() << userNameInSql;
}
QString inputUserName = ui->userLineEdit->text();
if(userNameInSql == inputUserName && inputUserName != "") { // 验证用户名口令是否一致
test->show();
}
else {
qDebug() << "User name or Password is wrong!";
}
2 Linux Qt 连接远程 MySQL(Win)
2.1 Linux 下载安装 ODBC
2.1.1 安装 unixODBC 和 ODBC
主要参考 https://blog.csdn.net/seakingx/article/details/87879164
进行到
sudo myodbc-installer -a -d -n "MySQL ODBC 8.0 Driver" -t "Driver=/usr/local/lib/libmyodbc8w.so
时,报错1
myodbc-installer: error while loading shared libraries: libodbc.so.2: cannot open shared object file: No such file or directory
原因:未按步骤安装 unixODBC,按以上参考顺序安装即可,若遇权限问题 sudo 无法解决 (如安装 unixODBC 过程中需要 make 但有权限问题 sudo 无法解决),就 su 转 root 用户再执行指令
正确步骤:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25unixODBC 安装
sudo wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.4.tar.gz
tar -xvzf unixODBC-2.3.4.tar.gz
cd unixODBC-2.3.4/
sudo ./configure --sysconfdir=/etc
make
sudo make install
检验是否安装成功
odbcinst -j
odbc 安装
sudo tar zxvf mysql-connector-odbc-8.0.15-linux-ubuntu18.04-x86-64bit.tar.gz
cd mysql-connector-odbc-8.0.15-linux-ubuntu18.04-x86-64bit/
sudo cp bin/* /usr/local/bin
sudo cp lib/* /usr/local/lib
sudo myodbc-installer -a -d -n "MySQL ODBC 8.0 Driver" -t "Driver=/usr/local/lib/libmyodbc8w.so"
sudo myodbc-installer -a -d -n "MySQL ODBC 8.0" -t "Driver=/usr/local/lib/libmyodbc8a.so"
验证是否安装成功
myodbc-installer -d -l
设置ODBC 参数
sudo vi /etc/odbc.ini最终的
/etc/odbc.ini
1
2
3
4
5
6
7
8
9[Neural]
Description = Data source MySQL
Driver = MySQL ODBC 8.0 Driver
Server = x.x.x.x
Host = x.x.x.x
Database = xxxx
Port = 3306
User = root
Password = 0000- 其中方括号内的是数据源名称,可以任意
- Description 描述根据自己需要,任意填写
- Driver 确定是 MySQL ODBC 8.0 Driver
- Server 和 Host 均为 MySQL 的 IP
- Database 为需要在 Linux 端使用的数据库
以上步骤走完后,
isql Neural
还是无法连接参考 https://blog.csdn.net/m0_37210884/article/details/114287684 应该
isql -v Neural root 0000
指明数据库,用户名,密码结果报错不太一样了,其中指出机器不允许连接
2.1.2 解决上文的 S1000 连接问题
原因:root 用户只允许本地登录,细节如下
use mysql;
SELECT user,host FROM user;
解决方法:将 root 对应的 host 改为 %,意即所有地址可访问。细节如下
update user set host = '%' where user = 'root';
更新访问权限flush privileges;
刷新访问权限表select user,host from user;
再查看 host 发现已经修改好了
结果:
在 Linux 端
isql -v Neural root 0000
直接进入连接,并使用在 odbc.ini 中我们预先指定的数据库了show tables;
大功告成!
2.2 Qt 中使用
上文已经可以在命令行中使用 ODBC 连接远程 MySQL 了,如何在 Qt 中连接呢
根据第 1 节的代码,类似的,我们在 Linux 环境下进行试验,当我们运行程序后,Qt 会报错 QSqlDatabase: QODBC driver not loaded
说明在连接 ODBC 驱动的数据库时,缺少了libqt4-sql-odbc驱动包
sudo apt-get install libqt4-sql-odbc
然后就可以成功连接啦!