コードはこんな感じ。
/**
* カーソルのヘルパー.
*/
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 件のコメント:
コメントを投稿