2017-10-13 47 views
0

所以我的問題,我試圖用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 我不明白我錯在哪裏。 感謝您的幫助。

回答

0

的解決方案,在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上工作。