QSqlDatabase sqlite数据库在iOS上不工作 - QT 5.9跨平台
问题描述:
所以我的问题,我试图用QT创建一个SQLite数据库。 所以......我用这个代码:QSqlDatabase sqlite数据库在iOS上不工作 - QT 5.9跨平台
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 我不明白我错在哪里。 感谢您的帮助。
答
的解决方案,在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时才起作用。 你可以在苹果开发者的link上看到。 现在也在跨平台,Android和iOS上工作。