直感的でシンプルにsqliteを操作できる、Androidのライブラリ、ActiveAndroidを試す。
Androidからsqliteを操作するとき、標準のライブラリは直感的でなく、呪文のようなコードを毎回書くのがつらいので、sqliteのライブラリを探してたところ、ActiveAndroidが良さそうだったので、調べてみた。これ以外にもORMLite、greenDaoが有名みたい。
理想
Item item = new Item(); item.name = "うまい棒"; item.price = 30; item.save();
いつもの
repositories { mavenCentral() maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } } compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'
まずはデータベース名を、AndroidManifest.xmlに定義する。
[ 変更前 ] AndroidManifest.xml
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
[ 変更後 ] AndroidManifest.xml
<application android:name="com.activeandroid.app.Application" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="AA_DB_NAME" android:value="sample.db" /> <meta-data android:name="AA_DB_VERSION" android:value="1" />
テーブルを作ろう
Itemsテーブル
・name
・price
Item.java
import com.activeandroid.Model; import com.activeandroid.annotation.Column; import com.activeandroid.annotation.Table; @Table(name = "Items") public class Item extends Model { @Column(name = "Name") public String name; @Column(name = "Price") public int price; }
MainActivity.java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // itemsにレコードを登録 Item item = new Item(); item.name = "うまい棒"; item.price = 30; item.save(); List<Item> items = new Select().from(Item.class).execute(); for (Item record : items) { Toast.makeText(MainActivity.this, record.name + ":" + record.price, Toast.LENGTH_SHORT).show(); } }
なんか動かない、テーブルがないので怒られる場合は、アプリを一度削除したら動くかも。しかし標準のライブラリと比べたらコードの量も減り、直感的でわかりやすくなった。
テストを見るとわかりやすい。
ActiveAndroid/tests/src/com/activeandroid/test/query at master · pardom/ActiveAndroid · GitHub