连接到数据库

要使用 QSqlQueryQSqlQueryModel 访问数据库,需要创建并打开一个或多个数据库连接。数据库连接通常通过连接名称标识,而非数据库名称。您可以对同一数据库拥有多个连接。 QSqlDatabase 还支持默认连接的概念,这是一个未命名的连接。当调用 QSqlQueryQSqlQueryModel 的成员函数,并带有连接名称参数时,如果您不传递连接名称,则将使用默认连接。创建默认连接在您的应用程序只需要一个数据库连接时非常方便。

请注意创建连接与打开连接之间的区别。创建连接涉及创建 QSqlDatabase 类的实例。直到连接被打开之前,连接是无法使用的。以下代码片段展示了如何创建一个默认连接并打开它:

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("bigblue");
    db.setDatabaseName("flightdb");
    db.setUserName("acarlson");
    db.setPassword("1uTbSbAs");
    bool ok = db.open();

第一行创建了连接对象,最后一行打开它以供使用。在此之间,我们初始化了一些连接信息,包括数据库名称、主机名称、用户名称和密码。在这种情况下,我们在主机 bigblue 上连接到 MySQL 数据库 flightdb。提供给 addDatabase() 的 "QMYSQL" 参数指定了连接时使用的数据库驱动程序类型。Qt 指含有的数据库驱动程序集在支持的数据库驱动程序 文章中展示。

此代码片段中的连接将是默认连接,因为我们没有传递给 addDatabase() 的第二个参数,这是连接名称。例如,在此我们建立了两个名为 "first""second" 的 MySQL 数据库连接。

    QSqlDatabase firstDB = QSqlDatabase::addDatabase("QMYSQL", "first");
    QSqlDatabase secondDB = QSqlDatabase::addDatabase("QMYSQL", "second");

初始化这些连接后,请求每个连接的 open() 以建立实时连接。如果 open() 失败,它将返回 false。在这种情况下,调用 QSqlDatabase::lastError() 获取错误信息。

一旦建立连接,我们就可以调用静态函数 QSqlDatabase::database() 以连接名称从任何位置获取指向数据库连接的指针。如果我们不传递连接名称,它将返回默认连接。例如

    QSqlDatabase defaultDB = QSqlDatabase::database();
    QSqlDatabase firstDB = QSqlDatabase::database("first");
    QSqlDatabase secondDB = QSqlDatabase::database("second");

要删除数据库连接,首先使用 QSqlDatabase::close() 关闭数据库,然后使用静态方法 QSqlDatabase::removeDatabase() 删除它。

© 2024 Qt有限责任公司。此处包含的文档贡献者是各自所有者的版权。本提供的文档遵循自由软件基金会发布的GNU自由文档许可证版本1.3的条款。Qt及其相关标志是Qt有限责任公司在芬兰及/或其他国家的商标。所有其他商标均为各自所有者的财产。