個人のアプリを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、といった確認ができそうです。