QT界面开发—数据库连接

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

QSQLITE是静态数据库,不需要服务器,直接对文件进行操作(a.db),以类似excel表格形式保存。常用在嵌入式开发系统中,开源免费,.c和.h文件大概1M多。

一、包含各种头文件

#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>
#include <QVariantList>

二、操作数据库

1. 打印qt支持的数据库驱动

代码如下(示例):

//打印Qt支持的数据库驱动
	qDebug() << QSqlDatabase::drivers();
	//控制台输出结果为("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")

2.添加数据库

代码如下(示例):

//添加SqlLite数据库
	QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

3.设置数据库

//设置数据库
	db.setDatabaseName("../info.db");

4.打开数据库

//打开数据库
	if (!db.open())//数据库打开失败
	{
		QMessageBox::warning(this, "错误", db.lastError().text());
		return;
	}

5.创建数据库表

//创建对象,创建表
	QSqlQuery query;
	query.exec("create table student (id int primary key, name varchar(255), age int,score int)");//主键id和其字段name、age、score

6.批量插入

//Windows的ODBC风格操作数据库
	//创建sql预处理语句?为占位符,后面将根据数据编译为普通sql语句
	//批量插入
	//odbc风格
	//预处理语句
	// ? 相当于占位符
	query.prepare("insert into student(id,name,age,score) values(?,?,?,?)");
	//给字段设置内容 list
	QVariantList idList;
	idList << 1 << 2 << 3;
	QVariantList nameList;
	nameList << "xiaoming" << "xiaolong" << "xiaojiang";
	QVariantList ageList;
	ageList << 11 << 22 << 33;
	QVariantList scoreList;
	scoreList << 59 << 69 << 79;
	//给字段绑定相应的值,按顺序绑定
	query.addBindValue(idList);
	query.addBindValue(nameList);
	query.addBindValue(ageList);
	query.addBindValue(scoreList);
	//执行预处理命令
	query.execBatch();

与odbc风格不同的是,oracle风格的占位为 :+自定义名称(一般和键名称相同)
	//query.prepare("insert into student(id,name,age,score) values(:id,:name,:age,:score)");

	分别创建几个键的列表
	//QVariantList idList, nameList, ageList, scoreList;
	//idList << 1 << 2 << 3;
	//nameList << "A" << "B" << "C";
	//ageList << 11 << 22 << 33;
	//scoreList << 59 << 69 << 79;

	按字段绑定
	//query.bindValue(":id", idList);
	//query.bindValue(":name", nameList);
	//query.bindValue(":age", ageList);
	//query.bindValue(":score", scoreList);

	执行预处理命令
	//query.execBatch();

7.遍历查询

query.exec("select * from student");
	while (query.next())//一行一行遍历
	{
		//取出当前行的内容
		qDebug() << query.value(0).toInt()
			<< query.value(1).toString()
			<< query.value("age").toInt()
			<< query.value("score").toInt();
	}

三、总结

在vs2013+Qt5.5建立项目可以去实验。
可以通过链接[(https://sqlitebrowser.org/blog/version-3-12-2-released/)]下载软件去打开.db文件查看。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值