QML(Qt)でsqliteのDBの保存場所

QML(Qt Quick)アプリから標準で唯一ローカルストレージに自由に読み書きできる「Offline Storage API」の実体がどこに保存されるかというお話です。

説明を見ると、「QDeclarativeEngine::offlineStoragePath()」で取得できる場所だよと書いてあります。
Qt Quickアプリケーションとして作ってて今までにC++でQtを経験されている方は、ベースになっているmain.cppにちょっとコード追加すれば確認できるのですが、Qt Quick UIでプロジェクト作ってQML Viewerで動かした場合は確認するすべがありません。

という訳で保存場所などの参考です。


/// ファイル構成 ///
・「hogehoge.ini」
 openDatabaseSync()を実行する時に指定する情報が保存されています。
 この内容を見るとどのアプリが保存したものかわかります。
 というか内容見ないとどれの分かわかりません、内容をハッシュ化したみたいなよくわからない文字列になっています。
・「hogehoge.sqlite」
 DBの実データです。
 hogehogeの部分は当然iniと同じです。


/// Windows XPの場合 ///
・Qt Quick アプリ
 C:\Documents and Settings\<User Name>\Local Settings\Application Data\QML\OfflineStorage\Databases


/// Windows 7/8の場合 ///
・Qt Quick アプリ
 C:\Users\<User Name>\AppData\Local\QML\OfflineStorage\Databases
・QML Viewer
 C:\Users\<User Name>\AppData\Local\Nokia\QtQmlViewer\QML\OfflineStorage\Databases
・Qt Simulator
 C:\Users\<User Name>\AppData\Local\Nokia\QtSimulator\data\QML\OfflineStorage\Databases


/// Ubuntuの場合 ///
・Qt Quick アプリ
 /home/<User Name>/.local/share/data/QML/OfflineStorage/Databases
・QML Viewer
 /home/<User Name>/.local/share/data/Nokia/QtQmlViewer/QML/OfflineStorage/Databases
・Qt Simulator
 /home/<User Name>/.local/share/data/Nokia/QtSimulator/data/QML/OfflineStorage/Databases


/// N9(Harmattan)の場合 ///
・Qt Quick アプリ
 /home/<User Name>/.local/share/data/QML/OfflineStorage/Databases
 基本的な考えはUbuntuと同じですが注意が必要なことがあります。
 デプロイしてQt Creatorから実行した場合とランチャーから通常起動した場合のユーザー名が変わります。
 なので、同じアプリでも起動のしかたで操作するDBの実体が変化します。(つまり独立した内容になる。)
 ・開発環境から実行した場合 : developer
 ・通常起動した場合 : user


/// Androidの場合 ///
・Qt Quick アプリ
 /data/data/<package name>/files/QML/OfflineStorage/Databases
 なのですが、ここはroot権限が無いと見れない場所なので実機の場合は直接ファイルをバックアップすることはできません。
 エミュレータなら可能ですが・・・。
 なのでバックアップしたい場合は、アプリ自身にこのディレクトリ内のファイルをSDカードへコピーする仕組みが必要です。


参考までにパスを確認するC++コードです。
main.cppにちょろっと追記でできます。

#include <QtDeclarative>

// ここから
    QDeclarativeEngine *eng = new QDeclarativeEngine();
    qDebug() << "db path=" << eng->offlineStoragePath();
    delete eng;
// ここまでをコピペ