gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:04:45 30 4
gpt4 key购买 nike

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

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com