QT之QSql学习
最近,因为公司的业务需求,需要使用 Qt 操作 MySQL 数据库,特意学习了一下,这里分享给大家。
一、环境介绍
Qt 版本:Qt 5.11.2(32位)
MySQL 版本:MYSQL8.0.22(64位)
二、连接 MySQL 数据库
以下为连接步骤:
- 在 pro 或者 pri文件中引入QT 的 sql 数据库模块:
//修改之前
QT += core gui
//修改之后
QT += core gui sql
- 在文件头部或者头文件中引入 QSql 模块:
#include<QSqlDatabase> //数据库驱动
#include<QSqlQuery> //数据库查询
- 定义一个 QSqlDatabase 对象,并赋值一个成员变量,创建 MySQL 数据库驱动:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
- 对 QSqlDatabase 对象进行连接配置:
db.setHostName("localhost"); //主机地址
db.setDatabaseName("test"); //数据库名称
db.setUserName("root"); //进入数据库的用户名
db.setPassword("123456"); //进入数据库的密码
db.setPort(3306); //数据库使用的端口号
- 用 Qt 创建一个 MySQL 数据库连接:
db.open();
连接的返回值为一个 bool 数据,这里可以根据返回的 bool 数据进行一个判断,值为 true 则进行下一步操作,提示否则报错,下面是一段参考代码:
if(db.open()){
//后续操作
}
else{
qDebug() << "数据库连接错误!";
}
- 创建一个 QSqlQuery 对象,用于自行后续的增删查改操作:
a) 增添数据:
预处理添加数据方式一:
QSqlQuery query;
query.prepare("insert into users (uname, pwd) values (:uname, :pwd)");
query.bindValue(":uname", "root");
query.bindValue(":pwd", "123");
query.exec();
预处理添加数据方式二:
QSqlQuery query;
query.prepare("insert into users (uname, pwd) values (:uname, :pwd)");
query.bindValue(0, "root");
query.bindValue(1, "123");
query.exec();
预处理添加数据方式三:
QSqlQuery query;
query.prepare("insert into users (uname, pwd) values (?, ?)");
query.bindValue(0, "root");
query.bindValue(1, "123");
query.exec();
预处理添加数据方式四:
QSqlQuery query;
query.prepare("insert into users (uname, pwd) values (?, ?)");
query.addBindValue("root");
query.bindValue("123");
query.exec();
b) 删除数据:
QSqlQuery query;
query.prepare("delete from users where uname = ?");
query.addBindValue("root");
query.exec();
c) 查询数据:
QSqlQuery query("select * from users");
while (query.next()) {
QString uname = query.value("uname").toString();
QString pwd = query.value(1).toString();
qDebug() << uname + ";" + pwd;
}
d) 修改数据:
QSqlQuery query;
query.prepare("update users set pwd = '123456' where uname = ?");
query.addBindValue("admin");
query.exec();
- 关闭数据库连接:
db.close();
三、解决 QT 自带的 Bug
完成以上操作后,就可以点击运行了,但是运行结果让人意外,报错 QMySQL driver not loaded。
网上百度了一下,原因出在 QT 安装路径下的 bin 文件夹中缺少 libmysql.dll 文件,将 mysql 安装路径下 lib 文件夹中的 libmysql.dll 文件复制到 QT 安装路径下的 bin 文件夹下,再次运行,运行结果还是一样报错 QMySQL driver not loaded。
又继续上网百度,终于查明了问题所在,MySQL 是 64 位的,Qt 却是 32 位的,两个软件位对不上号,所以再次报错,最后小编找了一个 32 位下的 libmysql.dll 文件,放置 QT 安装路径下的 bin 文件夹下,再次运行,运行成功,这里就不展示截图了。