如何在android上浏览所有数据库条目?

如何在android上浏览所有数据库条目?,android,sqlite,cursor,Android,Sqlite,Cursor,我有一张桌子,上面有一些行。其中的列有KEY\u ROWID和KEY\u TITLE。 我需要逐一浏览它们(除了空的KEY\u TITLE行),当前光标位置是KEY\u ROWID=ROWID 为了说明这一点: KEY_ROWID KEY_TITLE 1 3 title3 4 title4 5 7 title7 /** * Get next record *

我有一张桌子,上面有一些行。其中的列有
KEY\u ROWID
KEY\u TITLE
。 我需要逐一浏览它们(除了空的
KEY\u TITLE
行),当前光标位置是
KEY\u ROWID=ROWID

为了说明这一点:

KEY_ROWID    KEY_TITLE
  1           
  3           title3
  4           title4
  5           
  7           title7
/**
 * 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;
}    
rowId等于4。用户按下按钮,我们将获得标题非空的下一行的详细信息,即第7行。用户再次按下它-我们应该得到第3行(从开始到结束)

如何实现相同的功能? 相信,我应该将
KEY\u TITLE
非空的所有行设置为游标。然后,还有一些方法,如
moveToNext
moveToFirst
isLast

但我如何设置当前位置?我需要先检查所有行并比较rowIds吗?

我已经为相同的行编写了以下代码:

KEY_ROWID    KEY_TITLE
  1           
  3           title3
  4           title4
  5           
  7           title7
 cursor.moveToPosition( int position); ?
/**
 * 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;
}    

是否有更好/更快的方法实现同样的目标?

是的,但是如何计算位置?执行查询:“WHERE KEY\u TITLE NOT NULL”,然后您应该将相应的行ID存储在数组中。然后浏览它,如果到达数组的末尾,只需将光标设置回第一行,我建议您查看以下内容: