Qt 5.9连接MySQL5.7(32/64位)
-
MySQL5.7安装好后将其安装路径lib下 libmysql.dll 和 libmysqld.dll 两个动态链接库文件复制到Qt 相应编译环境(我用的mingw53_32)安装目录bin下即可
-
注:因为QT的mingw编译器是32位的,如果安装的MySQL是64位的话需将上面那个libmysql.dll替换为此libmysql.dll ( 提取码:m9iz)
-
远程连接数据库配置:需关闭防火墙、停用开机密码,然后用命令提示符进入数据库执行以下SQL语句即可(如何执行?)
use mysql;
grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;
-
测试
#.pro
QT += sql widgets
//.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QtSql/QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1"); //此为本地连接,可设主机IP
db.setPort(3306);
db.setDatabaseName("cpp_info"); //数据库名
db.setUserName("root");
db.setPassword("******"); //数据库密码
if(db.open())
{
qDebug()<<"数据库连接成功!!!";
}
/*操作数据库*/
return a.exec();
}
操作数据库(QSqlQuery类)
执行SQL语句(查)
浏览结果集方法
增、删、改
-
直接增加(插入)
//方法一
query.exec("insert into data(account,password) values('user', 'xxxxxx')");
-
使用占位符(名称绑定、位置绑定)
//方法二(名称绑定)
QString account = "user", password = "xxxxxx";
query.prepare("insert into data(account,password) values(:account, :password)");
query.bindValue(":account", account);
query.bindValue(":password", password);
query.exec(); //执行
//方法三(位置绑定)
QString account = "user", password = "xxxxxx";
query.prepare("insert into data(account,password) values(?, ?)");
query.addBindValue(account);
query.addBindValue(password);
query.exec(); //执行
-
增加多条记录(方法一、二皆可)
QVariantList account_list, password_list; //创建两个可以存储任意类型的列表对象
account_list << "user_1" << "user_2";
password_list << "111111" << "222222";
//方法一:名称绑定
query.prepare("insert into data(account,password) values(:account, :password)");
query.bindValue(":account", account_list);
query.bindValue(":password", password_list);
//方法二:位置绑定
query.prepare("insert into data(account,password) values(?, ?)");
query.addBindValue(account_list);
query.addBindValue(password_list);
query.execBatch(); //批处理执行,若出错返回false,可用lastError()返回错误信息,需#include<QSqlError>
-
删除
query.exec("delete from data where account = 'user'"); //删除user所对应的记录
-
修改(更新)
query.exec("update data set account = 'user_new' where account = 'user'");
-
注:删除和修改亦可使用占位符,和增加类似,就不做介绍了
事务
事务可以保证复杂操作的原子性,即对于一个数据库操作序列,这些操作要么全部做完,要么一条也不做,它是一个不可分割的工作单位,流程如下
- 使用QSqlDatabase::transaction() 来启动一个事务(必须在创建QSqlQuery的对象以前使用)
- 使用QSqlQuery类执行SQL语句
- 调用QSqlDatabase::rollback() 回滚 或是 调用QSqlDatabase::commit() 提交事务
参考书籍:Qt Creator快速入门(第三版)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)