qt c++中的Qsqlite重复连接警告
Qsqlite duplicate connection warning in qt c++
我正在用 qt 创建一个使用 sqlite 数据库的应用程序。我写了一个 class 打开数据库连接。 class 的构造函数如下:
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";
}
}
}
因为我使用了这个构造函数,所以当我为数据库 class 创建对象时,我收到以下警告:
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
有没有办法检查数据库是否已经打开?
该警告并不意味着您的数据库已经打开,而是您已经使用默认名称连接到数据库。该连接通过(在您的情况下是 SQLITE v3)数据库驱动程序提供对数据库的访问。如果您在调用 static public 方法 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;
}
我正在用 qt 创建一个使用 sqlite 数据库的应用程序。我写了一个 class 打开数据库连接。 class 的构造函数如下:
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";
}
}
}
因为我使用了这个构造函数,所以当我为数据库 class 创建对象时,我收到以下警告:
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
有没有办法检查数据库是否已经打开?
该警告并不意味着您的数据库已经打开,而是您已经使用默认名称连接到数据库。该连接通过(在您的情况下是 SQLITE v3)数据库驱动程序提供对数据库的访问。如果您在调用 static public 方法 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;
}