最近,因为公司的业务需求,需要使用 Qt 操作 MySQL 数据库,特意学习了一下,这里分享给大家。
以下为连接步骤:
//修改之前
QT += core gui
//修改之后
QT += core gui sql
#include //数据库驱动
#include //数据库查询
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost"); //主机地址
db.setDatabaseName("test"); //数据库名称
db.setUserName("root"); //进入数据库的用户名
db.setPassword("123456"); //进入数据库的密码
db.setPort(3306); //数据库使用的端口号
db.open();
连接的返回值为一个 bool 数据,这里可以根据返回的 bool 数据进行一个判断,值为 true 则进行下一步操作,提示否则报错,下面是一段参考代码:
if(db.open()){
//后续操作
}
else{
qDebug() << "数据库连接错误!";
}
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();
完成以上操作后,就可以点击运行了,但是运行结果让人意外,报错 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 文件夹下,再次运行,运行成功,这里就不展示截图了。
这里可以下载 libmysql.dll 文件。
学习分享,一起成长!接触QT的时间不长,目前差不多有两个月了,有不足之处,欢迎大佬指出来,我会进行更正。有问题可以发送邮件至 [email protected] ,不定时上线查收。