【QT】学习笔记:处理数据库 SQLite

news2024/9/22 7:27:54

在 Qt 中使用 SQLite 数据库非常简单,Qt 提供了 QSqlDatabaseQSqlQuery 类来处理数据库的连接、查询、插入、更新和删除等操作。下面是一个示例程序,展示如何在 Qt 中使用 SQLite 数据库。

示例代码

1. 项目配置

首先,确保在项目的 .pro 文件中添加对 Qt SQL 模块的支持:

QT += sql
2. SQLite 数据库操作示例

下面是一个简单的 Qt C++ 程序,展示如何创建 SQLite 数据库、创建表、插入数据、查询数据等操作。

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlRecord>
#include <QDebug>

void initializeDatabase()
{
    // 创建或打开 SQLite 数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("example.db");

    if (!db.open()) {
        qDebug() << "Error: Failed to connect to database." << db.lastError();
        return;
    }
    qDebug() << "Database connected successfully.";

    // 创建表
    QSqlQuery query;
    QString createTableQuery = R"(
        CREATE TABLE IF NOT EXISTS people (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            age INTEGER
        )
    )";

    if (!query.exec(createTableQuery)) {
        qDebug() << "Error: Failed to create table." << query.lastError();
    } else {
        qDebug() << "Table created successfully.";
    }
}

void insertData(const QString &name, int age)
{
    QSqlQuery query;
    query.prepare("INSERT INTO people (name, age) VALUES (:name, :age)");
    query.bindValue(":name", name);
    query.bindValue(":age", age);

    if (!query.exec()) {
        qDebug() << "Error: Failed to insert data." << query.lastError();
    } else {
        qDebug() << "Data inserted successfully.";
    }
}

void queryData()
{
    QSqlQuery query("SELECT id, name, age FROM people");

    while (query.next()) {
        int id = query.value(0).toInt();
        QString name = query.value(1).toString();
        int age = query.value(2).toInt();
        qDebug() << "ID:" << id << "Name:" << name << "Age:" << age;
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 初始化数据库
    initializeDatabase();

    // 插入数据
    insertData("John Doe", 30);
    insertData("Jane Doe", 25);

    // 查询数据
    queryData();

    return a.exec();
}

代码说明

  1. 创建或打开数据库

    • 使用 QSqlDatabase::addDatabase("QSQLITE") 添加一个 SQLite 数据库连接。
    • db.setDatabaseName("example.db"); 设置数据库文件名。如果文件不存在,SQLite 会自动创建一个新的数据库文件。
  2. 创建表

    • 使用 QSqlQuery 执行 SQL 语句来创建一个名为 people 的表。表包含 id(自增主键)、name(文本)和 age(整数)三个字段。
  3. 插入数据

    • 使用 QSqlQuery::prepare 准备 SQL 插入语句,并使用 bindValue 绑定参数,然后执行 exec() 来插入数据。
  4. 查询数据

    • 使用 QSqlQuery 执行 SQL 查询,并使用 query.next() 遍历结果集。query.value(index) 用于访问每一行的字段值。

运行结果

当你运行这个程序时,输出可能如下所示:

Database connected successfully.
Table created successfully.
Data inserted successfully.
Data inserted successfully.
ID: 1 Name: John Doe Age: 30
ID: 2 Name: Jane Doe Age: 25

总结

通过这个示例,你学会了如何在 Qt 中使用 SQLite 数据库,包括创建数据库、创建表、插入数据和查询数据的基本操作。Qt 的 SQL 模块提供了一个简洁的接口,使用它可以轻松地集成 SQLite 或其他 SQL 数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2086304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

李宏毅 机器学习与深度学习【2022版】 03

文章目录 一、卷积神经网络CNN二、使用验证集&#xff0c;模型还过拟合的原因三、深度学习的优点四、Spatial Transformer Layer 一、卷积神经网络CNN CNN在影像识别中&#xff0c;表现比较好。 每个感受野 receptive field 都有一个神经元去探测鸟嘴&#xff0c;是没有没要的…

Vue(三)内置指令v-text、html、cloak、once、pre;自定义指令的三种方式、Vue生命周期

文章目录 1. 内置指令1.1 v-text、v-html指令1.2 v-cloak指令1.3 v-once指令1.4 v-pre指令 2. 自定义指令(directives)2.1 函数式2.2 对象式2.3 注意点 3. 生命周期3.1 挂载流程3.2 更新流程3.3 销毁流程 1. 内置指令 1.1 v-text、v-html指令 v-text与v-html都是向所在的节点…

0. Spring 的 控制反转和依赖注入

提起Spring&#xff0c;很多人第一反应就是IOC和AOP。那IOC到底是什么东东&#xff1f; IOC&#xff08;Inversion of Control) 翻译过来叫控制反转。DI&#xff08;Dependency Injection&#xff09;翻译过来叫依赖注入。这时候就应该掏出我们的人生三问了。 控制反转用人话说…

【数据结构】线性表的链式表示(单链表)

计算机考研408-数据结构笔记本之——第二章 线性表 2.3 线性表的链式表示&#xff08;单链表的定义、基本操作&#xff1a;初始化/插入/删除/查找与建立&#xff09;

苹果 iOS / iPadOS 18 beta8和iOS / iPadOS 18.1 beta3版本更新

苹果今日向iPhone和iPad用户推送了 iOS / iPadOS 18 开发者预览版 Beta 8 更新&#xff08;内部版本号&#xff1a;22A5350a&#xff09;和iOS / iPadOS 18.1 开发者预览版 Beta 3 更新&#xff08;内部版本号&#xff1a;22B5034e&#xff09;&#xff0c;本次更新距离上次发布…

Linux系统使用Docker compose搭建开源文档系统Paperless-ngx

文章目录 前言1. 部署Paperless-ngx2. 本地访问Paperless-ngx3. Linux安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 前言 本文主要介绍如何在Linux系统本地部署Paperless-ngx开源文档管理系统&#xff0c;并结合cpolar内网穿透工具解决本地部署…

Oracle SYSAUX表空间使用率过高进行清理

巡检的时候发现SYSAUX表空间使用率超过了80%&#xff0c;将近达到了60G: TABLESPACE_NAME Allocated (MB) Free (MB) Used (MB) PERCENTFREE -------------------- -------------- ---------- ---------- ----------- SYSAUX 60440 7907 …

Java框架第三课(Spring)超级全

目录 一.关于Spring (1)什么是Spring (2)IOC解释 (3)Aop解释 (4)"一站式"解释 二.Spring框架的搭建(以Hello World为例) ​编辑 三.Spring框架的IOC (1)IOC基于xml配置 (2)基于注解配置 (3)xml文件配置和注解配置的优缺点 四.Spring集成Mybatis (1)Spring集…

【亲测有效】icmp,tcpping工具源码

icmp&#xff0c;tcpping工具源码 import socket import subprocess import platform import time import sysdef icmp_ping(host, count4):param -n if platform.system().lower() windows else -ctry:# 执行 ping 命令result subprocess.run([ping, param, str(count), h…

给自己复盘的随想录笔记-哈希表

哈希表理论基础 哈希表 那么哈希表能解决什么问题呢&#xff0c;一般哈希表都是用来快速判断一个元素是否出现集合里。 将学生姓名映射到哈希表上就涉及到了hash function &#xff0c;也就是哈希函数。 哈希函数 如果hashCode得到的数值大于 哈希表的大小了&#xff0c;也就…

【Qt】QLCDNumber | QProgressBar | QCalendarWidget

文章目录 QLCDNumber —— 显示数字QLCDNumber 的属性QLCDNumber 的使用 QProgressBar —— 进度条QProgressBar 的属性创建一个进度条修改为 红色的进度条 QCalendarWidget —— 日历QCalendarWidget 的属性QCalendarWidget 的使用 QLCDNumber —— 显示数字 QLCDNumber 的属…

Nuxt3入门:介绍、项目安装和了解视图(第一节)

你好同学&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 有对 Nuxt3.0 感兴趣的小伙伴吗&#xff1f;一起来了解下 一、介绍 Nuxt is an open source framework that makes web development intuitive and powerful. Create performant and production-grad…

通过 pnpm 安装依赖包会发生什么

通过 pnpm 安装依赖包会发生什么 通过 pnpm 下载的包都是放在一个全局目录&#xff08;.pnpm-store&#xff09;下&#xff0c;默认是在 ${os.homedir}/v3/.pnpm-store&#xff0c;如果我们不确定在哪里&#xff0c;可以输入下面的命令手动配置&#xff1a; pnpm set store-d…

数据库文件(嵌入式)

一、数据库文件与普通文件区别 1、普通文件对数据管理&#xff08;增删改查&#xff09;效率低 2、数据库对数据管理效率高&#xff0c;使用方便 二、常用数据库 1、关系型数据库&#xff1a; 将复杂的数据结构简化为二维表格形式 大型&#xff1a;Oracle、DB2 中型&#x…

Java 入门指南:Java NIO —— Channel(通道)

NIO 的引入 在传统的 Java I/O 模型&#xff08;BIO&#xff09;中&#xff0c;I/O 操作是以阻塞的方式进行的。当一个线程执行一个 I/O 操作时&#xff0c;它会被阻塞直到操作完成。这种阻塞模型在处理多个并发连接时可能会导致性能瓶颈&#xff0c;因为需要为每个连接创建一…

哈工大-操作系统L29

从生磁盘到文件 通过文件使用磁盘更加直观方便 一.映射的左右与实现 1.映射作用 如何从文件得到盘块号,用户看到的字符流,而操作系统看见的是盘块,所以建立字符流到盘块的映射 读写&#xff1a;电梯队列到内存缓冲区中&#xff0c;修改然后再放到电梯队列写出去 操作系统负…

web渗透:信息收集常用的工具

目录 如何根据特定网站的特性选择合适的信息收集工具&#xff1f; 网络安全专业人士通常会使用哪些信息收集工具进行漏洞挖掘&#xff1f; 数据分析师在进行市场研究时通常使用哪些信息收集工具&#xff1f; 数据收集工具 数据处理工具 数据分析工具 数据呈现工具 思维导…

艺术家林曦:“高枕无忧”的生活,需要遇见更好的自己

多年前&#xff0c;林曦老师在与朋友的交谈中&#xff0c;曾提到“想过高枕无忧的生活”。那种身心安逸、无所忧虑&#xff0c;坦然面对自己的状态&#xff0c;想来着实愉快。      或许&#xff0c;当焦虑变为当今社会难以避免的课题&#xff0c;“高枕无忧”才更成了我们…

数据结构:栈、队列详解篇

数据结构&#xff1a;栈、队列详解篇 一、栈&#xff08;一&#xff09;栈的概念&#xff08;二&#xff09;栈的实现1、结构定义2、功能实现&#xff08;1&#xff09;栈的初始化&#xff08;2&#xff09;栈的销毁&#xff08;3&#xff09;栈的扩容&#xff08;4&#xff09…

【大模型从入门到精通46】LLM部署运维(LLM Ops)使用Kubeflow Pipelines掌握LLM工作流3

这里写目录标题 功能概览函数定义实践示例&#xff1a;测试适当的拒绝最佳实践与建议适用于科学测验测试的修订函数科学测验测试函数定义执行与评估最佳实践与注意事项 功能概览 evaluate_request_refusal 函数模拟了系统应该基于预定义的标准拒绝生成测验的情景&#xff0c;这…