自分で作ったAndroidアプリのSQLiteのDDLを確認する


個人のアプリをAndroid Architecture ComponentのRoomに変更してみようと思いました。
ただ、現状は OrmLite を利用しているので、そもそものDDL文がありません。(classへのアノテーションで表現している)
そのため、まずは現状調査のために、Android上で動作しているSQLiteのDDLを取得してみようと思います。

DBファイルを取得する

Android SQLiteのファイルをadbコマンドで取得 - Qiita に書かれている通りです。

例えば、今回のアプリでは build.gradle は下記のようになっています。

android {
    defaultConfig {
        applicationId "hm.orz.chaos114.android.slideviewer"
    }
    buildTypes {
        debug {
            applicationIdSuffix '.debug'
        }
    }
}

また、 SQLiteOpenHelper 継承のクラスが、下記のようになっていました。

public final class DatabaseHelper extends OrmLiteSqliteOpenHelper {
    private static final String DATABASE_NAME = "slide_viewer.db";
    private static final int DATABASE_VERSION = 1;
    public DatabaseHelper(Context context) {
        super(context.getApplicationContext(), DATABASE_NAME, null, DATABASE_VERSION);
    }
}

そのため、
[パッケージ名] : hm.orz.chaos114.android.slideviewer.debug
[データベース・ファイル名] : slide_viewer.db
となり、実行するコマンドは下記のようになりました。

adb shell run-as hm.orz.chaos114.android.slideviewer.debug cat databases/slide_viewer.db > app.db

DDLを取得する

sqlite3 コマンドは、Android SDKの中にあるようです。
adb コマンドなどと同様に、 ...Android/sdk/platform-tools のようなフォルダにPATHが通っていれば、そのまま実行できるはずです。
例えば、今回はCREATE文だけが欲しかったので、下記のようにしてみました。

> sqlite3 app.db .dump | grep CREATE
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE `talk` (`id` INTEGER PRIMARY KEY AUTOINCREMENT , `modifiedAt` INTEGER , `ratio` FLOAT , `url` VARCHAR );
CREATE TABLE `slide` (`id` INTEGER PRIMARY KEY AUTOINCREMENT , `original` VARCHAR , `preview` VARCHAR , `talk_id` INTEGER , `thumb` VARCHAR );
CREATE TABLE `talkmetadata` (`id` INTEGER PRIMARY KEY AUTOINCREMENT , `talk_id` INTEGER , `title` VARCHAR , `user` VARCHAR );

これを、Roomに変えたあとでも確認して、同じようになっていればOK、といった確認ができそうです。