1

所以我的问题是,我试图用 QT 创建一个 sqlite 数据库。所以......我使用这个代码:

QString dbName = "apo.sqlite";
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(dbName);

if( QFile::exists(dbName))
{
    db.setDatabaseName(dbName);
    db.database(dbName,true);
    qDebug()<<"DATABASE EXIST";

    if(db.open())
    {
        QSqlQuery query(db);
        query.prepare("INSERT INTO settings (username, password, remember_login) VALUES ('aaa', 'bbb', '1')");
        query.exec();

        qDebug() << "DATABASE OPEN";
        query.prepare("SELECT * FROM `settings`");
        query.exec();

        while (query.next())
        {
            qDebug() << "USERNAME" << query.value("username").toString();
        }
    }
    else
    {
        qDebug() << "DATABASE CLOSED";
    }
}
else {
    qDebug() << "DATABASE NOT EXIST, I CREATE ONE";

    if(!db.isOpen()) {
        qDebug() << "ERROR I CAN'T OPEN DATABASE";
    }
    else
    {
        QSqlQuery q;
        q.prepare("CREATE TABLE `settings` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `username` TEXT, `password` TEXT, `remember_login` TEXT);");
        q.exec();

        qDebug() << "DB opened";

        QSqlQuery query(db);
        query.prepare("INSERT INTO settings (username, password, remember_login) VALUES ('aaa', 'bbb', '1')");
        query.exec();

        query.prepare("SELECT * FROM settings");
        query.exec();

        while (query.next())
        {
            qDebug() << "USERNAME" << query.value("username").toString();
        }
    }
}

好吧,你可以看到我已经将我的代码设置为在应用程序上检查第一次打开,在第一次打开时我创建了一个数据库。在第二次打开时,我读取了数据库。此代码适用于 android 设备,但在 iOS 设备上此代码不起作用,为什么?也许跨平台不支持此代码?

我使用 qt 5.9 我不明白我错在哪里。谢谢您的帮助。

4

1 回答 1

1

在 iOS 上工作的解决方案是:

QString dbName = "myDB";

QString dbLocation = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);

db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(dbLocation + "/" +dbName);
db.database(dbLocation + "/" +dbName);
db.databaseName();

要在 iOS 上工作,您必须使用路径,在数据库名称之前添加路径。我测试了一些路径,但仅在您使用 DocumentsLocation 时才有效。你可以从苹果开发者的这个链接上看到。现在也可以在跨平台、Android 和 iOS 上工作。

于 2017-10-16T09:33:24.103 回答