LoginSignup
6
7

More than 5 years have passed since last update.

SquiDB入門 (SQLite framework for Android)

Last updated at Posted at 2015-05-07

SquiDBとは

Androidのために作られたSQLiteデータベースのフレームワークです。(参照:Wiki

... yahooさん、本当にありがとう。

SquiDBの導入

Submoduleとして追加する

1) AndroidStudioで適当なプロジェクトを作成. (APIは14以上で設定しておいてください)
2) SquiDBをsubmoduleとしてプロジェクトに追加する.

$ cd your_project
$ git init
$ git submodule add https://github.com/yahoo/squidb.git module

これでmoduleというフォルダが自動で作成され、squidb関連のフォルダが入ったと思います。

.gradleを修正

  1. setting.gradleに各種追加.
  2. build.gradleに各種追加.
  3. app/build.gradleにandroid/packagingOptions, apt, dependenciesを各種追加.
  4. 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

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7