如何遍历Android上的所有数据库条目?

发布于 2024-10-27 23:38:07 字数 588 浏览 2 评论 0原文

我有一张桌子,里面有一些行。列有 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 之类的方法。 但如何设置当前位置呢?我需要先遍历所有行并比较 rowId 吗?

I have the table and it has some number of rows there. Columns there are KEY_ROWID and KEY_TITLE.
I need to go thru them one by one (except empty KEY_TITLE rows) and current cursor position is KEY_ROWID = rowId.

Just to illustrate the same:

KEY_ROWID    KEY_TITLE
  1           
  3           title3
  4           title4
  5           
  7           title7

rowId is equal to 4. User presses the button, we should get details of next row with non-empty title, i.e. row 7. User presses it again - we should get row 3 (starting from the start when end is reached).

How to implement the same?
Believe, I should get all rows where KEY_TITLE non-empty to Cursor. Then, there are methods like moveToNext, moveToFirst, isLast.
But how can I set current position? Do I need to go thru all rows first and compare rowIds?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小霸王臭丫头 2024-11-03 23:38:07
 cursor.moveToPosition( int position); ?
 cursor.moveToPosition( int position); ?
过期情话 2024-11-03 23:38:07

我已经为此编写了以下代码:

/**
 * 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;
}    

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

I've written the following code for the same:

/**
 * 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;
}    

Is there any better/faster way to achieve the same?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文