如何在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存储在数组中。然后浏览它,如果到达数组的末尾,只需将光标设置回第一行,我建议您查看以下内容: