连接数据库

要使用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();

第一行创建连接对象,最后一行打开连接以供使用。在这之间,我们初始化了一些连接信息,包括database namehost nameuser namepassword 。在本例中,我们连接到主机bigblue 上的 MySQL 数据库flightdb"QMYSQL" addDatabase 参数指定了连接要使用的数据库驱动程序类型。Qt 中包含的数据库驱动程序集如支持的数据库驱动程序表所示。

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

    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() 删除。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.