c++ - Qt中如何检查文件是否被数据库驱动占用

标签 c++ qt sqlite

假设我想在 Qt 中打开一个到 SQLite3 数据库的连接。它将连接到现有数据库 dbName

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

现在我需要设置 db.setDatabaseName(dbName),其中 dbName 是通过 QFileDialog 接收的。

但是,只要 dbName 是一个有效的文件名,那么 db.open() 总是 true。无论如何检查文件 dbName 是否是 SQLite3 数据库,但不是任何其他类型的?我现在能做的是执行查询并检查错误,例如:

db.setDatabaseName(dbName);
if (db.open()) {
  QSqlQuery qr(db);
  if (!qr.exec(".database;")) {
    qDebug() << qr.lastError().text();
    return false;
  }
}

但如果文件为空,它将不起作用。

最佳答案

Qt 总是使用 SQLITE_OPEN_CREATE标志,因此不存在或空文件被认为是有效的(对于新的空数据库)。

如果您不想更改 Qt,或者不想编写自己的数据库驱动程序,唯一的选择是手动检查有效的 database header。在文件中。

关于c++ - Qt中如何检查文件是否被数据库驱动占用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37979500/

相关文章:

c++ - 堆栈上 char 的有效迭代器范围

c++ - beagle bone black 的 undefined reference 链接器错误静态库交叉编译

c++ - 以编程方式在 QTreeView 中选择一行

c++ - 两个不同的插槽调用相同的方法 - 线程安全

database - wxSQLite3 中准备语句重用的异常

C++比较两个相似数组的长度

c++ - 启动时如何在Qt应用程序中隐藏鼠标指针?

database - 嵌入式数据库的选择?

python-3.x - 如何使用 _bz2、_sqlite 和 _ssl 从源代码构建 python 3.3.2

C++ 如何将我的主类与我的头文件链接起来?