Qt 读取数据库

embedded/2025/3/19 12:48:43/

在 Qt 中读取数据库文件通常涉及以下步骤。这里以 SQLite 为例(Qt 内置支持),其他数据库(如 MySQL、PostgreSQL)需要对应驱动:

1. 添加 SQL 模块依赖

在项目文件 .pro 中添加:

QT += sql

2. 基本代码框架

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>// 创建数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("your_database.db"); // SQLite 数据库文件路径if (!db.open()) {qDebug() << "Error opening database:" << db.lastError().text();return;
}// 执行查询
QSqlQuery query;
if (!query.exec("SELECT * FROM your_table")) {qDebug() << "Query error:" << query.lastError().text();return;
}// 遍历结果
while (query.next()) {int id = query.value("id").toInt();QString name = query.value("name").toString();qDebug() << "ID:" << id << "Name:" << name;
}// 关闭数据库(通常在程序退出时)
db.close();

关键点说明:

  1. 数据库驱动

    • SQLite:使用 QSQLITE
    • MySQL:使用 QMYSQL(需要 MySQL 客户端库)
    • PostgreSQL:使用 QPSQL(需要 libpq)
  2. 路径处理

    • 使用绝对路径更可靠:db.setDatabaseName("/path/to/database.db")
    • 资源文件:":/database.db"(如果数据库文件在 qrc 中)
  3. 错误处理

    • 始终检查 db.open()query.exec() 的返回值
    • 使用 lastError() 获取错误详情

高级用法示例

// 参数化查询(防止 SQL 注入)
query.prepare("INSERT INTO users (name, age) VALUES (?, ?)");
query.addBindValue("John");
query.addBindValue(30);
query.exec();// 事务操作
db.transaction();
// 执行多个操作...
if (success) {db.commit();
} else {db.rollback();
}

常见问题排查

  1. 驱动不可用

    • 检查可用驱动:qDebug() << QSqlDatabase::drivers();
    • 确保编译 Qt 时启用了相应数据库支持
  2. 数据库文件权限

    • 确保应用程序有文件读写权限
  3. 连接泄漏

    • 使用 QSqlDatabase::removeDatabase() 关闭不再需要的连接

如果要处理其他数据库类型,需要:

  1. 安装数据库客户端库
  2. 确保 Qt 编译时包含对应驱动
  3. 修改连接参数(主机、端口、用户名、密码等)

例如 MySQL 连接:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("mydb");
db.setUserName("root");
db.setPassword("secret");

http://www.ppmy.cn/embedded/173862.html

相关文章

Python 基础知识整理笔记

闹麻了&#xff0c;因为各种原因&#xff0c;现在需要重新回顾一下Python&#xff0c;话不多说&#xff0c;开始吧 1. Python是解释型语言 && Python与C代码执行过程的区别&#xff1a; &#xff08;1&#xff09;C 源码&#xff08;Source&#xff09;&#xff1a;C的…

【gopher的java学习笔记】本地调试时配置Feign接口URL的实用指南

在微服务架构中&#xff0c;Feign作为声明式HTTP客户端简化了服务间调用&#xff0c;但在本地开发调试时&#xff0c;常因服务未注册到注册中心或需要绕过服务发现直接访问特定实例&#xff0c;需手动配置Feign的URL。本文将介绍三种主流配置方式&#xff0c;帮助开发者灵活应对…

软考网络安全专业

随着信息技术的迅猛发展&#xff0c;网络安全问题日益凸显&#xff0c;成为社会各界普遍关注的焦点。在这样的背景下&#xff0c;软考网络安全专业应运而生&#xff0c;为培养高素质的网络安全人才提供了有力支撑。本文将对软考网络安全专业进行深入剖析&#xff0c;探讨其在信…

什么是YApi?开源接口管理平台部署教程

YApi 到底是个啥&#xff1f; 各位小伙伴们好呀&#xff01;今天要给大家介绍的是一款超级好用的接口管理神器——YApi&#xff01;它是一个高效、易用、功能强大的 API 管理平台&#xff0c;简直就是开发、产品、测试人员的福音啊&#xff01;&#xff01;&#xff01;它能帮…

PCIe信号传输的幕后:HCSL与LP-HCSL深度解析

在数字化浪潮席卷的当下&#xff0c;PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;作为高速串行计算机扩展总线标准&#xff0c;已然成为计算机内部硬件设备连接领域的中流砥柱。其信号传输的质量与完整性&#xff0c;恰似计算机系统运行的 “命门”…

创建系统还原点,保护系统安全

在我们使用电脑时&#xff0c;经常会因为系统设置问题&#xff0c;中毒&#xff0c;驱动&#xff0c;注册表等等问题导致系统无法正常运行&#xff0c;甚至崩溃 其实&#xff0c;Windows内置了像手机一样的还原功能&#xff0c;只要平时创建了还原点&#xff0c;出现问题时就可…

进程与线程

进程与线程 procfork.cgetpid.cn_proc.cproc_num.cexit/_exitatexit.cwait.cwaitpid.cwaitpid_lianxi.cexecl.cexec_workminishell threadpthread_selfpthread_exitpthread_canclepthread_limitpthread_joinpthread_join2pthread_argspthread_args2pthread_detachpthread_clean…

51单片机和STM32 入门分析

51单片机和STM32是嵌入式开发中两种主流的微控制器&#xff0c;它们在架构、性能、应用场景等方面存在显著差异。以下是两者的对比分析及选择建议&#xff1a; 1. 51单片机与STM32的定义与特点 51单片机 定义&#xff1a;基于Intel 8051内核的8位微控制器&#xff0c;结构简单…