我正在尝试使用.open()函数在QT中打开一个sqlite数据库文件,如果文件没有退出,。open()不返回false,它只是在给定的文件中创建一个新文件目录。我的代码:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("C:/sqlite/newDB.db");
if(!db.open()){
ui->test->setText("Fail");
}
else{
ui->test->setText("Success");
}
如何让它返回真或假?
答案 0 :(得分:4)
你不能让它返回真或假,这是它的工作原理。 。
但是,您可以在使用QFile::exists("C:\\sqlite\\newDB.db")
打开数据库之前检查文件是否存在。之后,如果它存在,您可以尝试这样的查询,以确保它没有损坏:
QSqlQuery q;
if(!q.exec("SELECT name, sql FROM sqlite_master WHERE type='table' ;")){
//corrupt sqlite file
}
最终代码可能如下所示:
if(!QFile::exists("C:\\sqlite\\newDB.db")){
//file does not exist
}
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("C:\\sqlite\\newDB.db");
if(!db.open()){
//Database open error
}
{
QSqlQuery q;
if(!q.exec("SELECT name, sql FROM sqlite_master WHERE type='table' ;")){
//corrupt or invalid sqlite file
}