【问题标题】:QT open not existing databaseQT 打开不存在的数据库
【发布时间】:2019-12-19 23:24:07
【问题描述】:

我创建了用于连接 sqlite3 数据库的简单函数。但我已经认识到它会建立连接,即使数据库文件不存在

如下所示:我尝试检查文件是否真的存在以及它是否真的连接。

bool DatabaseConnection::make_connection(const QString &path)
{

    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(path);

    #ifdef QT_DEBUG
        qDebug() << "File: '" + db.databaseName() + "' exist = " << QFileInfo::exists(db.databaseName());
        qDebug() << db.isValid();
    #endif

    if (!db.open())
    {
        QMessageBox::critical(nullptr,
            QObject::tr("Error - Cannot open database"),
            QObject::tr("Failed attempt to establish connection \n"),
            QMessageBox::Close);
        return false;
    }
    qDebug() <<"Open:" <<db.isOpen();
    qDebug() << "errors:" << db.isOpenError();
    return true;
}

在第一次编译时更改路径名后 - 文件不存在,但似乎已建立连接(真)。

在下一次编译中告诉该文件存在(我无法在任何地方找到它),并且再次“建立”连接

【问题讨论】:

  • 解释是QSqlDatabase 创建了一个数据库文件(关闭时),即使它最初并不存在。

标签: c++ sqlite qt


【解决方案1】:

我遇到了类似的问题,如果 db.open() 不存在,它会创建新文件。 只需将 db.open() 包装在 QFileInfo::exists(path) 周围即可。

【讨论】:

    【解决方案2】:

    我相信如果您尝试访问一个不存在的 SQLite3 数据库,它会创建一个。因此 db.open() 将尝试创建一个数据库文件,如果没有找到。在调用 db.open() 之前,最好先使用其他方法检查数据库文件是否存在。

    【讨论】:

      猜你喜欢
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多