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

1、Qt添加数据库的dll

【QT】Qt creator连接MySQL数据库 - 增删改查_第1张图片
将mysql文件lib目录下的libmysql.dlllibmysql.lib复制到Qt中的bin目录文件下
【QT】Qt creator连接MySQL数据库 - 增删改查_第2张图片

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

【QT】Qt creator连接MySQL数据库 - 增删改查_第3张图片

3、数据库的连接

添加头文件:

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

进行数据库的连接:

//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, "提示", "数据库连接成功");
}

连接成功:
【QT】Qt creator连接MySQL数据库 - 增删改查_第4张图片
切换QSQLITE,也成功
【QT】Qt creator连接MySQL数据库 - 增删改查_第5张图片

特别注意:
操作数据库增删改查时,需要用到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);	

【QT】Qt creator连接MySQL数据库 - 增删改查_第6张图片

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();

【QT】Qt creator连接MySQL数据库 - 增删改查_第7张图片

  • 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();

【QT】Qt creator连接MySQL数据库 - 增删改查_第8张图片

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;");

【QT】Qt creator连接MySQL数据库 - 增删改查_第9张图片

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

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

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

很简单:

QSqlDatabase::database();	// 返回当前数据库对象

你可能感兴趣的:(QT,数据库,qt,mysql)