QT上位机开发(数据库sqlite编程)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

编写软件的时候,如果用户的数据比较少,那么用json保存是非常方便的。但是一旦数据量大了之后,建议还是用数据库来进行管理比较好。数据库在增、删、改、查这方面还是比较好用的。目前,有一种小型的开源数据库sqlite,特别适合大家来使用。它是嵌入在软件程序里面的。和mysql不一样,mysql是单独一个数据库服务器。

1、qt对sqlite的支持

本身qt可以直接访问sqlite数据库,引用头文件的时候,直接输入QtSql即可,如下所示,

复制代码
#include <QtSql/QtSql>

2、链接时的注意事项

默认,qt是没有把QtSql的lib放入到链接库当中的,所以这部分需要自己手动来完成,如下所示,

3、测试方法

首先我们可以创建一个简单的qt widget工程。在界面部分不需要再做任何的修改,所以也就不需要designer的参与。代码部分呢,可以编写一个loadDB的类函数。在这个类函数里面,为了测试sqlite的功能,我们可以做一些增、删、改、查的操作,如果所有的操作都是ok的,那就代表测试代码是正确的、没问题的。

4、loadDB函数的编写

测试的过程基本是这样的。首先,利用QSqlDatabase创建一个data.db的数据库。有了这个数据库之后,打开数据库。接下来用QSqlQuery进行第一个操作,就是创建一张mytable的表。有了表之后,我们就可以插入数据、查询数据、更改数据、查询数据、删除数据、查询数据,总共是6个动作。所有动作都做完毕之后,就可以关闭数据库了。在数据库操作的过程当中,还可以通过qDebug打印的办法来判断操作是否正确。qDebug打印的地方就在输出窗口里面,如下所示,

整个测试的源代码是这样的,

复制代码
int QtWidgetsApplication::loadDB()
{
	// create database
	QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
	db.setDatabaseName("data.db");

	// open database
	if (!db.open()) {
		qDebug() << "Error: Unable to open database";
		return 1;
	}

	// execute query
	QSqlQuery query;

	// create a table
	if (!query.exec("CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY, name TEXT)")) {
		qDebug() << "Error: Unable to create table";
		return 1;
	}

	// insert data
	if (!query.exec("INSERT INTO mytable (name) VALUES ('John Doe')")) {
		qDebug() << "Error: Unable to insert data";
		return 1;
	}

	// query data
	if (query.exec("SELECT * FROM mytable")) {
		qDebug() << "Records in mytable:";
		while (query.next()) {
			int id = query.value(0).toInt();
			QString name = query.value(1).toString();
			qDebug() << "ID:" << id << "Name:" << name;
		}
	}
	else {
		qDebug() << "Error: Unable to fetch data";
		return 1;
	}

	// update data
	if (!query.exec("UPDATE mytable SET name='Jane Doe' WHERE id=1")) {
		qDebug() << "Error: Unable to update data";
		return 1;
	}

	// query data after update
	if (query.exec("SELECT * FROM mytable")) {
		qDebug() << "Records in mytable after update:";
		while (query.next()) {
			int id = query.value(0).toInt();
			QString name = query.value(1).toString();
			qDebug() << "ID:" << id << "Name:" << name;
		}
	}
	else {
		qDebug() << "Error: Unable to fetch data";
		return 1;
	}

	// delete data
	if (!query.exec("DELETE FROM mytable WHERE id=1")) {
		qDebug() << "Error: Unable to delete data";
		return 1;
	}

	// query after delete
	if (query.exec("SELECT * FROM mytable")) {
		qDebug() << "Records in mytable after delete:";
		while (query.next()) {
			int id = query.value(0).toInt();
			QString name = query.value(1).toString();
			qDebug() << "ID:" << id << "Name:" << name;
		}
	}
	else {
		qDebug() << "Error: Unable to fetch data";
		return 1;
	}

	// close connection of database
	db.close();
}

有兴趣的同学可以按照这个流程完整地走一遍。这样就可以在后面的项目中灵活使用sqlite了。一般项目中,使用到的业务要复杂一点,也有可能不止一张表,但是对数据库操作的逻辑都是这样的,没有什么区别。整体来说,sqlite的学习还是比较方便、比较简单的,十分适合用于上位机的开发和应用。

相关推荐
m0_74823292几秒前
你还在手动画ER图吗?让SQL自动生成ER图,轻松解决作业难题!
数据库·sql·oracle
清流君3 分钟前
【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作
数据库·人工智能·笔记·mysql·ue5·数字孪生
邂逅岁月3 分钟前
MySQL表的增删改查初阶(下篇)
数据库·sql·mysql
Python_金钱豹4 分钟前
Text2SQL零代码实战!RAGFlow 实现自然语言转 SQL 的终极指南
前端·数据库·sql·安全·ui·langchain·机器人
静听夜半雨6 分钟前
CANoe入门——3、新建LIN工程及LIN DataBase(LDF文件)的创建
网络·数据库·c++·编辑器
DarkAthena1 小时前
【ORACLE】记录一些ORACLE的merge into语句的BUG
数据库·oracle·bug
大新新大浩浩2 小时前
arm64适配系列文章-第三章-arm64环境上mariadb的部署
数据库·arm·mariadb
聪明的墨菲特i2 小时前
SQL进阶知识:九、高级数据类型
xml·数据库·sql·mysql·json·空间数据类型
oioihoii2 小时前
金仓数据库 KingbaseES 产品深度优化提案:迈向卓越的全面升级
数据库·性能优化·金融·金仓数据库 2025 征文·数据库平替用金仓
艺杯羹2 小时前
JDBC 批处理与事务处理:提升数据操作效率与一致性的密钥
数据库·mysql·jdbc·事务处理·批处理数据