2017-10-13 3 views
0

donc mon problème, je tente de créer une base de données sqlite avec QT. Alors ... j'utiliser ce code:QSqlDatabase base de données sqlite fonctionne sur Android un pas sur iOS - QT 5.9 cross plate-forme

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(); 
     } 
    } 
} 

Eh bien, vous pouvez voir que j'ai mis mon code pour vérifier d'abord ouvert sur l'application, le premier ouvert je crée un db. Sur la deuxième ouverte, et plus, j'ai lu la base de données. ce code fonctionne sur un appareil Android, mais sur iOS appareil ce code ne fonctionne pas, pourquoi? Peut-être que la plateforme croisée ne prend pas en charge ce code?

J'utilise qt 5.9 Je ne comprends pas où je me trompe. Merci pour l'aide.

Répondre

0

les solutions aux travaux sur iOS est:

QString dbName = "myDB"; 

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

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

aux travaux sur iOS, vous devez utiliser un chemin, ajoutez le chemin avant le nom de la base de données. J'ai testé un chemin, mais ne fonctionne que lorsque vous utilisez DocumentsLocation. Vous pouvez voir sur ce link du développeur Apple. Travaillez maintenant sur des plateformes croisées, Android et iOS aussi.