假设我想在 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/