【QT】Qt creator连接MySQL数据库 - 增删改查

1、Qt添加数据库的dll

在这里插入图片描述
将mysql文件lib目录下的libmysql.dlllibmysql.lib复制到Qt中的bin目录文件下
在这里插入图片描述

2、注意:需要操作此步骤,否则是无法连接上数据库的!

在这里插入图片描述

3、数据库的连接

添加头文件:

#include <QtSql/QSqlDatabase>	// 连接数据库
#include <QtSql/QSqlError>		// 数据库连接失败打印报错语句
#include <QtSql/QSqlQuery>		// 数据库操作(增删改查)
#include <QMessageBox>
#include <QVariantList>			// 泛型链表,可以存储任何类型的数据
#include <QDebug>

进行数据库的连接:

//addDatabase() 创建一个连接,调用这个函数时,我们可以传递我们要访问哪种类型的数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");     //驱动 

db.setHostName("localhost");          // 数据库地址,一般都是本地,填localhost就可以(或者填写127.0.0.1) 
db.setDatabaseName("dbtest");         // 数据库名,根据你Mysql里面的数据库名称来填写,比如我的Mysql里面有个数据库叫school
db.setUserName("root");               // 登录用户名,一般是本地用户,填root就可以
db.setPassword("root");				  // 登录密码,填写你自己Mysql登陆密码
db.setPort(3306);                     // 端口,默认是3306


// 打开数据库
if (!db.open()) {	// 数据库打开失败
	QMessageBox::warning(this, "警报", db.lastError().text());	// 显示错误信息
	return;
} else {
	QMessageBox::information(this, "提示", "数据库连接成功");
}

连接成功:
在这里插入图片描述
切换QSQLITE,也成功
在这里插入图片描述

特别注意:
操作数据库增删改查时,需要用到QSqlQuery query;;当每次需要操作时,最好都是定义一个新的去操作,避免不必要的操作失败!

4、数据库操作

1、创建表

create table 表名(列名 类型, …, 列名 类型);

// 创建表
QSqlQuery query;	// *对数据进行操作所需要使用到的对象*
QString sql = "";
// 定义sql语句
sql = "create table qt_test_table(id int PRIMARY KEY AUTO_INCREMENT, name varchar(32), age int, score int);";
// 执行sql语句
query.exec(sql);	

在这里插入图片描述

2、插入单条数据

insert into 表名 values(数据1, 数据2, …, 数据n);

// 插入数据
sql = "insert into qt_test_table values(1, '小明', 00, 59);";
query.exec(sql);	// 执行sql语句

3、批量插入数据

  • odbc风格
// 创建预处理语句:?相当于 占位符
query.exec("insert into qt_test_table(name, age, score) values(?, ?, ?);");
// 给字段设置内容
QVariantList nameList;
nameList << "小红" << "小黄" << "小蓝" << "小紫";
QVariantList ageList;
ageList << 11 << 22 << 33 << 44;
QVariantList scoreList;
scoreList << 69 << 79 << 89 << 99;
// 给字段绑定相应的值,按顺序绑定
query.addBindValue(nameList);
query.addBindValue(ageList);
query.addBindValue(scoreList);
// 执行预处理命令
query.execBatch();

在这里插入图片描述

  • oracle风格
    两者风格差不多,区别在于占位符与绑定顺序。
// 创建预处理语句:占位符  : + 自定义名字(一般写跟字段名一致)
query.prepare("insert into qt_test_table(name, age, score) values(:name, :age, :score);");
// 给字段设置内容
QVariantList _nameList;
_nameList << "小绿" << "小黑" << "小白" << "小橙";
QVariantList _ageList;
_ageList << 55 << 66 << 77 << 88;
QVariantList _scoreList;
_scoreList << 19 << 29 << 39 << 49;
// 给字段绑定相应的值,不局限于顺序
query.bindValue(":name", _nameList);
query.bindValue(":score", _scoreList);
query.bindValue(":age", _ageList);
// 执行预处理命令
query.execBatch();

在这里插入图片描述

4、删除数据

delete from 表名 where 条件;

// 删除数据
sql = QString("delete from qt_test_table where name = '小明';");
query.exec(sql);

5、更新数据

update 表名 set 列名 = ***, …, 列名 = *** where 条件;

// 更新数据
sql = QString("update qt_test_table set name = '小小晓晓', age = 18, score = 100 where id = 2;");
query.exec(sql);

6、查询数据

使用.next()方法指向下一条记录,如果还有则返回true,如果没有了则返回false。

通过.value()可以获得对应字段的内容;

可以通过数字下标方式获得,也可以通过字段名获得。

select * from 表名; //查询全部
select 字段名 from 表名; //仅查询该字段内容
select * from 表名 where 条件; //条件查询

// 查询数据
query.exec("select * from qt_test_table;");		// 查询全部
//query.exec("select * from qt_test_table where id = 2;");	// 条件查询
// 当查询完数据返回false
while (query.next()) {
	qDebug() << query.value(0).toInt()			// 第一个字段
			 << query.value(1).toString()		// 第二个字段
			 << query.value("age").toInt()		// 也可以通过字段名进行获取
			 << query.value("score").toInt();
}

7、删除表

drop table 表名;

// 删除表
query.exec("drop table qt_test_table;");

在这里插入图片描述

8、释放数据库连接
当不在使用数据库时,记得释放数据库的连接。

// 释放数据库连接  
db.close();         

9、获得当前数据库对象
有时候我们的数据库对象是在构造函数里定义的,但是如果我们需要在私有的方法里使用它,该如何使用呢?

很简单:

QSqlDatabase::database();	// 返回当前数据库对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cappuccino-jay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值