2017-10-06 13 views
0

私はiosandroidにアプリを作っています。 私はカスタムデータベースを取得する必要があります、sqliteクライアントのDBブラウザでsqliteデータベースを作成しました。 私はdb.sqliteと呼ばれ、私は私のqtクリエイターの溶液中で(データベースフォルダ)に置く:モバイル(ios android)クロスプラットフォームでsqliteデータベースパスを呼び出すQT

enter image description here

だから、私はあなたが機能フォルダに参照、DBマネージャクラスを作成しました。 しかし、dbパスを呼び出す方法はわかりません。私は、例えば、変更にいくつかのフォルダのパスをしようと試みてきた

DbManager::DbManager(QObject *parent) : QObject(parent) 
{ 
    m_db = QSqlDatabase::addDatabase("QSQLITE"); 
    m_db.setDatabaseName(QCoreApplication::applicationDirPath().append("/database/db.sqlite")); 
    bool connected = m_db.open(); 

    if (!connected) { 
     qDebug() << "Error: connection with database failed"; 
    } else { 
     qDebug() << "Database: connection success"; 

     QSqlQuery q(m_db); 

     q.prepare("SELECT * FROM oven"); 

     if (q.exec()) { 
      qDebug() << "Yay!"; 
     } else { 
      qDebug() << "Bad exec: " << q.lastError(); 
      qDebug() << q.executedQuery(); 
     } 
    } 
} 

: :データベース/ db.sqlite または :../データベース/ db.sqlite または デシベル は、これは私のDBManagerのクラスコードであります.sqliteのみ

Evereyこのソリューションは動作しません、私は助けが必要です。 カスタムデータベースを呼び出す正しいパスは何ですか?

ありがとうございました

+0

もしあなたが気にしないなら、realmdbを使うことができます。 –

答えて

1

モバイルでランダムパスを使用することはできません。 m_dbnameは、データベースの名前をイスト

m_db = QSqlDatabase::addDatabase("QSQLITE"); QString dbLocation = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); m_db.setDatabaseName(dbLocation + "/" + m_dbname);

:このような何かを試してみてください。

+0

データベースファイルはどこに置くのですか?あなたは解決策は私に2つの異なるパスを返す、私とアンドロイドの戻りパスそれは等しくないパス....だから私はどこにデータベースファイルを置くのですか? –

+0

もちろん、2つの異なるパスが表示されます。それがポイントです!すべてのプラットフォームには独自の標準的な場所がありますが、各プラットフォームごとに異なるプラットフォームです。上記を使用すると、プラットフォーム固有のパスが得られます。言い換えれば、QStandardPathsがあなたに与えるディレクトリに入れます。コードはすべてのプラットフォームで同じですが、場所は明らかに異なります。ここを見てください:http://doc.qt.io/qt-5/qstandardpaths.html –

関連する問題