2017-10-13 22 views
0

그래서 내 문제는 QT로 sqlite 데이터베이스를 만들려고합니다. 그래서 ... 나는이 코드를 사용합니다QSqlDatabase sqlite 데이터베이스는 iOS가 아닌 Android에서 작동합니다 - 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(); 
     } 
    } 
} 

글쎄, 당신은 내가이 DB를 생성 처음 열 때, 응용 프로그램에 대한 최초의 개방형 확인하기 위해 내 코드를 설정 한 것을 볼 수 있습니다. 두 번째 오픈시, 이상, 나는 데이터베이스를 읽었다. 이 코드는 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에서도 작동합니다.