over 4 years ago

ORMLiteを使うとSQLiteに関する処理が簡潔になります。

セットアップ

  1. http://ormlite.com/releases/ から ormlite-core-X.XX.jar, ormlite-android-X.XX.jar をダウンロードします。
  2. libsに配置します。

使う

例外をtry-catchしなければならない場合がありますが省略します。

データベース接続と切断

AndroidConnectionSourceを経由してConnectionSourceのインスタンスを取得してデータベースへ接続できます。

ConnectionSource connectionSource = new AndroidConnectionSource(new AccountHelper(this));

AccountHelperは、OrmLiteSqliteOpenHelperのサブクラスです。

public class AccountHelper extends OrmLiteSqliteOpenHelper {
    private final static String DB_NAME = "app.db";
    private final static int DB_VERSION = 1;

    public AccountHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2, int arg3) {

    }
}

データベースへ接続したら切断を最後にする必要があるでしょう。

connectionSource.close();

テーブルの作成と破棄

TableUtils.createTable(connectionSource, Account.class);
` Accountクラスはテーブルの構造に相当します。これはORMLiteの利用者が各自で作成しなければならないものです。また、取り出したデータを保持するためにも使います。
@DatabaseTable(tableName = "accounts")
public class Account {
    
    @DatabaseField(id = true)
    private int id;
    
    @DatabaseField
    private String name;

    public Account() {
    }
    
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

ORMLiteでは、上述のようなクラスに対してアノテーションでJavaのクラスやフィールドを、データベースのテーブル/カラムと関連づけて利用します。

DatabaseFieldでは、多くのオプションを設定できます。とくにカラム名を指定するcolumnNameは使う機会が多いと思います。columnNameを設定しない場合は、フィールド名がそのままカラム名になります。dataTypeはデータの型を設定しますが、Serializableを実装したクラスはdataTypeにSERIALIZABLEを設定する必要があります。idオプションはIDです。idの代わりにgeneratedIdを使用すると自動的にidの割当をしてくれます。

http://ormlite.com/javadoc/ormlite-core/com/j256/ormlite/table/DatabaseTable.html

不要なテーブルを破棄したい場合は、dropTableを使います。

TableUtils.dropTable(connectionSource, Account.class, true);

DAOをつくる

Data Access Objectを作ります。これはSQL文を抽象化したメソッドを呼ぶために使います。

Dao<Account,Integer> dao = DaoManager.createDao(connectionSource, Account.class);

行の追加or更新

Account account = new Account();
account.setName("nomoto");
account.setId(1);
dao.createOrUpdate(account);

行をすべて取り出す

List<Account> accounts = accountDao.queryForAll();

特定の行を取り出す

検索クエリで検索を行い特定のデータだけを抽出します。

QueryBuilder<Account, Integer> query = dao.queryBuilder().orderBy("id", true);
Where<Account, Integer> where = query.where();
where.like("name", "ynomoto%");
where.and();
where.between("id", 50, 99);
List<Account> accounts = dao.query(where.prepare());

QueryBuilderはSQLクエリの作成の手助けをするクラスです。orderBy()メソッドで第一引数を基準にtrueで昇順、falseで降順にデータを取り出します。

WhereクラスはWHERE句を表現します。
Whereクラスのlike()はLIKE演算子を表現します。
Whereクラスのand()はAND演算子を表現します。OR演算子を表現するor()もあります。
Whereクラスのbetween()はBETWEEN演算子を表現します。
Daoのqueryにwhere.prepare()を渡すとクエリが実行されデータが抽出されます。

Whereの詳細を見たい場合はgetStatement()を実行してください。

実行結果例:
(name LIKE 'ynomoto%' AND id BETWEEN 50 AND 99 )

javadoc

http://ormlite.com/javadoc/ormlite-core/
http://ormlite.com/javadoc/ormlite-android/

← ExifInterface とジオタグ java-universal-tween-engine - トゥイーンエンジンでダイナミックな変化を →