SquiDBとは
Androidのために作られたSQLiteデータベースのフレームワークです。(参照:Wiki
... yahooさん、本当にありがとう。
SquiDBの導入
Submoduleとして追加する
- AndroidStudioで適当なプロジェクトを作成. (APIは14以上で設定しておいてください)
- SquiDBをsubmoduleとしてプロジェクトに追加する.
$ cd your_project
$ git init
$ git submodule add https://github.com/yahoo/squidb.git module
これでmodule
というフォルダが自動で作成され、squidb関連のフォルダが入ったと思います。
.gradleを修正
- setting.gradleに各種追加.
- build.gradleに各種追加.
- app/build.gradleにandroid/packagingOptions, apt, dependenciesを各種追加.
- squidb関連フォルダにあるbuild.gradleを確認し、dependenciesに
compile project(':squidb')
といった記載があれば,compile project(':module:squidb')
というようにpathを変更.
詳細は作成したサンプルプロジェクトをご覧ください..!
以上で、ビルドが出来るようになったと思います。
次はいよいよ、シンプルな使用例を書いていきますよ。
SquiDBを使った実装
テーブル定義
テーブル:people, カラム:name (default = "Me", not null)
@TableModelSpec(className = "Person", tableName = "people")
public class PersonSpec {
@ColumnSpec(defaultValue = "Me", constraints = "NOT NULL")
String name;
}
default値や、not null制約などをAnnotationで記載できます。
className = "Person"ってなんぞや...と思っているあなた。後で説明します。
データベース設定
public class ExampleDatabase extends AbstractDatabase {
private static final int VERSION = 1;
private static final String NAME = "ex-database.db";
public ExampleDatabase(Context context) {
super(context);
}
@Override
protected String getName() {
return NAME;
}
@Override
protected Table[] getTables() {
return new Table[]{
Person.TABLE,
};
}
@Override
protected int getVersion() {
return VERSION;
}
@Override
protected boolean onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
return true;
}
}
AbstractDatabaseを継承して作成します。以下は必ず実装してください。
String getName(); // データベースのファイル名
int getVersion(); // データベースのバージョン
// この値がインクリメントされると、マイグレーションが実行されます
Table[] getTables(); // データベース初期化時に、作成したいテーブルのリスト
void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion); // データベースのアップグレードをハンドリングする
ExampleDatabaseクラスのgetTablesメソッド内で、先ほどクラス名として定義したPersonが使われています。PersonとはPersonSpecクラスを元に、自動で作成されるクラスになります。なので、ビルドしていない状態でPerson.TABLEと書くと、普通にエラーがでます。ビルドすると怒られなくなります。安心してください。
DatabaseDaoを使用してデータベースを操作する
public class MainActivity extends ActionBarActivity {
private DatabaseDao dao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dao = new DatabaseDao(new ExampleDatabase(this));
Person newPerson = new Person();
//newPerson.setName("Sam");
// インサートします
dao.persist(newPerson);
// persistをコールした後は, モデルがIDを持っているはず
long rowId = newPerson.getId();
fetch(rowId);
}
// IDからPersonを取得して名前を表示する
private void fetch(long rowId) {
Person person = dao.fetch(Person.class, rowId);
Toast.makeText(this, person.getName(), Toast.LENGTH_SHORT).show();
}
}
基本的なCRUD操作のサンプルはこちらにあります。
最後に
本家のWikiを見ると本当にまだまだ書き足りないですが、入門ということで以上にさせていただきます。ありがとうございました!
Links
https://github.com/yahoo/squidb
https://github.com/yahoo/squidb/wiki
https://github.com/yahoo/squidb/wiki/Using-DatabaseDao
https://github.com/gotokatsuya/squidb-example