QSqlDatabase检查数据库是否已存在

时间:2015-07-02 09:14:37

标签: c++ sql qt

我需要在本地系统上给我的系统带来一些价值,然后以表格格式访问它,所以我选择了QSqlDatabase。而作为第一个我必须检查数据库已经存在。但是使用下面的代码我总是收到消息Data base not exist creating new....可能是什么问题?

#include <QtCore/QCoreApplication>
#include <QtSql/QSqlDatabase>
#include "QFile"
#include "QDebug"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString dbName = "lprDB";
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

    if( QFile::exists(dbName))
    {
         qDebug()<<"Data base exist....";
    }
    else {
        qDebug()<<"Data base not exist creating new....";
        db.setDatabaseName(dbName);
    }

    return a.exec();
}

2 个答案:

答案 0 :(得分:1)

如@Armatel所述,您应该打开db,这将创建db文件。

#include <QtCore/QCoreApplication>  
#include <QtSql/QSqlDatabase>
#include "QFile"
#include "QDebug"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString dbName = "lprDB";
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

    if( QFile::exists(dbName))
    {
        qDebug()<<"Data base exist....";
    }
    else {
        qDebug()<<"Data base not exist creating new....";
        db.setDatabaseName(dbName);
        db.open(); // <<< Add this!

        if(!db.isOpen()) {
            qDebug() << "ERROR: could not open database";
        }
        qDebug() << "DB opened";
    }

    return a.exec();
}

答案 1 :(得分:0)

可能addDatabase将数据库创建到与QFile :: exists检查不同的目录。

我的理解是QSqlDatabase将数据库创建到标准数据位置文件夹,可以通过以下方式获得:

QStringList dataLocations = QStandardPaths::standardLocations(QStandardPaths::DataLocation);
QString dataLocationPath =  dataLocations.at(0);

所以,也许检查

QFile::exists(dataLocationPath+"/"+dbName) 

有助于?