QT QSqlDatabase open()函数创建一个sqlite数据库

时间:2016-05-07 22:49:19

标签: c++ qt sqlite

我正在尝试使用.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");
    }

如何让它返回真或假?

1 个答案:

答案 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
}