如何通过android上的所有数据库条目?

时间:2011-03-29 18:27:21

标签: android sqlite cursor

我有桌子,那里有一些行数。列有KEY_ROWIDKEY_TITLE。 我需要逐个通过它们(空KEY_TITLE行除外),当前光标位置为KEY_ROWID = rowId

只是为了说明一样:

KEY_ROWID    KEY_TITLE
  1           
  3           title3
  4           title4
  5           
  7           title7

rowId等于4.用户按下按钮,我们应该获得具有非空标题的下一行的详细信息,即第7行。用户再次按下它 - 我们应该得到第3行(从结束时开始到达)。

如何实现相同的? 相信,我应该将KEY_TITLE非空的所有行都放到Cursor中。然后,有moveToNextmoveToFirstisLast等方法。 但是我如何设置当前位置?我是否需要先通过所有行并比较rowIds?

2 个答案:

答案 0 :(得分:0)

 cursor.moveToPosition( int position); ?

答案 1 :(得分:0)

我为此写了以下代码:

/**
 * Get next record 
 * 
 * @param next possible values are +1 - move forward, -1 - move back
 * @return rowId of the next record
 */    
public long getNextRecord(int next, long rowId) {
    long nextRowId = 0;
    Cursor mCursor = mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID,KEY_TITLE}, KEY_TITLE + "!=\"\"", null, null, null, null);
    if (mCursor.moveToFirst()) {
        do {
            Log.i(TAG, "rowId/KEY_ROWID/KEY_TITLE: "+rowId+"/"+mCursor.getLong(mCursor.getColumnIndexOrThrow(KEY_ROWID))+"/"+mCursor.getString(mCursor.getColumnIndexOrThrow(KEY_TITLE)));
            if (mCursor.getLong(mCursor.getColumnIndexOrThrow(KEY_ROWID)) == rowId) {
                if (!mCursor.move(next)) {
                    // first (-1) or last position
                    if (mCursor.getPosition() == -1) {
                        mCursor.moveToLast();
                    } else {
                        mCursor.moveToFirst();
                    }
                }
                nextRowId = mCursor.getLong(mCursor.getColumnIndexOrThrow(KEY_ROWID));
                break;
            }
        } while (mCursor.moveToNext());
    }
            mCursor.close();
        return nextRowId;
}    

有没有更好/更快的方法来实现同样的目标?