nirasan's tech blog

趣味や仕事の覚え書きです。Linux, Perl, PHP, Ruby, Javascript, Android, Cocos2d-x, Unity などに興味があります。

ActiveAndroid Tips

はじめに

Date型を扱う

Date now = new Date();
new Select()
	.from(SomeModel.class)
	.where("SomeDate = ?", now.getTime())
	.execute();

実行したSQL文のデバッグ表示

com.activeandroid.util.Log.setEnabled(true);

リレーションシップ

"1:多"な親子関係の定義

  • Category が親で Item が子
@Table(name = "Categories")
public class Category extends Model {
    @Column(name = "Name")
    public String name;

    public List<Item> items() {
        return getMany(Item.class, "Category");
    }
}

@Table(name = "Items")
public class Item extends Model {

    @Column(name = "Name")
    public String name;

    @Column(name = "Category")
    public Category category;
}

外部キー制約で親の削除時に子も削除する

  • デフォルトでは子のいる親を削除すると例外が発生する
  • Column の定義時に onDelete を適宜指定すると、子も同時に削除できる
@Table(name = "Items")
public class Item extends Model {

    @Column(name = "Name")
    public String name;
	
    // 変更箇所
    @Column(name = "Category", onDelete = Column.ForeignKeyAction.CASCADE)
    public Category category;
}

レコードの存在確認

    public void testExistsWhereClause() {
        cleanTable();
        populateTable();

        From from = new Select()
                .from(MockModel.class)
                .where("intField = ?", 1);

        final List<MockModel> list = from.execute();
        final boolean exists = from.exists();

        assertTrue(exists);
        assertTrue(list.size() > 0);
    }