qt c++中的Qqlite重复连接警告

Qsqlite duplicate connection warning in qt c++

本文关键字:连接 警告 Qqlite c++ 中的 qt      更新时间:2023-10-16

我正在qt中创建一个使用sqlite数据库的应用程序。我已经写了一个打开数据库连接的类。该类的构造函数如下所示:

currencydb::currencydb()
{
    currency = QSqlDatabase::addDatabase("QSQLITE");
    currency.setDatabaseName("currency.sqlite");
    if(!currency.isOpen())
    {
        if (!currency.open())
        {
            qDebug() << "Error: connection with database fail";
        }
        else
        {
            qDebug() << "Database currency: connection ok";
        }
    }
}

由于我使用了这个构造函数,当我为数据库类创建对象时,我会收到以下警告:

QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.

有没有办法检查数据库是否已经打开?

该警告并不意味着您的数据库已经打开,但您已经使用默认名称连接到数据库。该连接通过(在您的情况下是SQLITEv3)数据库驱动程序提供对数据库的访问。如果在调用static公共方法QSqlDatabase::addDatabase()时未传递连接名称参数,则创建与数据库的默认连接。

您可以使用QSqlDatabase::contains()来检查您是否已经拥有默认连接。

CurrencyDb::CurrencyDb()
{
    currency = openDb("QSQLITE", "currency.sqlite");
}
QSqlDatabase CurrencyDb::openDb(const QString &driver, const QString &name) const
{
    QSqlDatabase db;
    // contains() default argument is initialized to default connection
    if (QSqlDatabase::contains())
    {
        db = QSqlDatabase::database(QLatin1String(QSqlDatabase::defaultConnection), false);
    }
    else
    {
        db = QSqlDatabase::addDatabase(driver.toUpper());
    }
    db.setDatabaseName(name);
    if (!db.isValid())
    {
        // Log error (last error: db.lastError().text()) and throw exception
    }
    if (!db.open())
    {
        // Log error (last error: db.lastError().text()) and throw exception
    }
    return db;
}