2013年6月27日木曜日

[Android]SQLiteのカーソル処理ヘルパーを作ってみた

ちょっと前にGDD Blog: [Android]SQLiteによるカーソルのループ処理の書き方っていうのを書きました。なんかしっくりこないので、ヘルパーを書いてみました。
コードはこんな感じ。


/**
 * カーソルのヘルパー.
 */
public class CursorHelper {

    /**
     * 初回フラグ.
     */
    private boolean mIsFirst = true;

    /**
     * 操作対象のカーソル.
     */
    private final Cursor mCursor;

    /**
     * 次有無判定
     *
     * @return true:次あり false:次なし
     */
    public boolean hasNext() {
        if (!mIsFirst) {
            // 2回目以降
            return mCursor.moveToNext();
        }

        mIsFirst = false;
        // 初回
        return mCursor.moveToFirst();
    }

    /**
     * コンストラクタ.
     *
     * @param cursor 操作対象のカーソル
     */
    public CursorHelper(Cursor cursor) {
        mCursor = cursor;
    }
}


で、利用側はこんな感じ。


    public void onButton3(View view) {

        // DBをオープンして、簡単なクエリーを投げる
        SQLiteOpenHelper helper = new DBOpenHelper(this);
        SQLiteDatabase db = helper.getReadableDatabase();
        Cursor cursor = db
                .rawQuery("select * from TEST_TABLE", new String[] {});
        CursorHelper ch = new CursorHelper(cursor);

        // hasNext兼next
        while (ch.hasNext()) {
            // ・・・処理
            Log.d("sql", "code2 data=" + cursor.getString(1));

        }

        cursor.close();
        db.close();
        helper.close();
    }
ヘルパーのhasNextでnextの処理もしなければいけない点と、毎回if文を通る残念な感じはありますが、利用側からはわかりやすいような気もします。 んーイテレータで書いたほうがかっこいいかも。

0 件のコメント: