【Qt之数据库操作】详解
  yQAl4kecrO8W 2023年12月23日 16 0


Qt进行数据库操作主要用到sql模块的QSqlDatabase类及其他相关类。
如果要使用该sql模块。
.pro文件中添加QT += sql

概述

QSqlDatabase 类处理与数据库的连接。
QSqlDatabase 类提供了一个通过连接来访问数据库的接口。QSqlDatabase 的实例表示连接。通过支持的数据库驱动程序之一(派生自 QSqlDriver),连接提供对数据库的访问。或者,您可以从 QSqlDriver 派生自己的数据库驱动程序。有关更多信息,请参见如何编写自己的数据库驱动程序。
通过调用其中一个静态的 addDatabase() 函数创建一个连接(即 QSqlDatabase 的一个实例),在其中您可以指定要使用的驱动程序或驱动程序类型(取决于数据库类型)和连接名称。连接通过其自己的名称而不是与其连接的数据库的名称来标识。您可以对一个数据库建立多个连接。QSqlDatabase 还支持默认连接的概念,默认连接是无名称的连接。要创建默认连接,在调用 addDatabase() 时不传递连接名称参数。随后,如果在调用任何静态成员函数时未指定连接名称,将默认使用默认连接。以下代码片段展示了如何创建并打开到 PostgreSQL 数据库的默认连接:

QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
  db.setHostName("acidalia");
  db.setDatabaseName("customdb");
  db.setUserName("jito");
  db.setPassword("J0a1m8");
  bool ok = db.open();

一旦 QSqlDatabase 对象被创建,使用 setDatabaseName()、setUserName()、setPassword()、setHostName()、setPort() 和 setConnectOptions() 设置连接参数。然后调用 open() 来激活与数据库的物理连接。在打开连接之前,该连接是不可用的。
上述定义的连接将成为默认连接,因为我们没有给 addDatabase() 传递连接名称。随后,您可以通过在不连接名称参数的情况下调用 database() 来获取默认连接:

QSqlDatabase db = QSqlDatabase::database();

QSqlDatabase 是一个值类。通过 QSqlDatabase 的一个实例对数据库连接进行的更改将影响到表示相同连接的其他 QSqlDatabase 的实例。使用 cloneDatabase() 基于现有连接创建一个独立的数据库连接。
警告:强烈建议不要将 QSqlDatabase 的副本保存为类的成员,因为这将阻止在关闭时正确清理该实例。如果需要访问现有的 QSqlDatabase,应使用 database() 进行访问。如果选择有一个 QSqlDatabase 成员变量,它需要在删除 QCoreApplication 实例之前进行删除,否则可能会导致未定义行为。
如果创建多个数据库连接,请在调用 addDatabase() 时为每个连接指定唯一的连接名称。使用带有连接名称的 database() 可以获取该连接。使用带有连接名称的 removeDatabase() 来删除连接。如果试图删除被其他 QSqlDatabase 对象引用的连接,QSqlDatabase 将发出警告。使用 contains() 可以查看给定的连接名称是否在连接列表中。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月23日 0

暂无评论

推荐阅读
yQAl4kecrO8W