Java如何在Cursor上实现moveToPrevious方法?

时间:2013-07-01 16:02:49

标签: android sqlite cursor

我在名为moveToPrevious()Cursor上遇到了一种方法。

我之前读过article,建议实施C SQLite step command的向后版本很难/不可能:

  

...要求sqlite3_step_backward()按钮非常希望您的符号调试器能够向后运行或“撤消”其执行回到上一个断点。没有人合理地期望调试器能够做到这一点,所以你不应该期望SQLite能够sqlite3_step_backward()。

  • Android游标是否是SQLite或某种独立实现的包装?
  • 怎么做这个moveToPrevious命令?

2 个答案:

答案 0 :(得分:2)

Cursor接口提供对数据库查询返回的结果集的随机读写访问。不需要同步Cursor实现,因此使用Cursor时,使用来自多个线程的Cursor的代码应该执行自己的同步。

Cursor:使用Cursors从Android中的SQLite数据库中检索数据。 Android SQLite查询方法返回一个包含查询结果的Cursor对象.Cursors将查询结果记录存储在行中,并授予许多方法来访问和遍历记录。要使用游标,必须导入android.database.Cursor。

http://developer.android.com/reference/android/database/Cursor.html

检查来源

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/database/Cursor.java/

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/database/AbstractCursor.java/

查看链接中的第248行

248 public final boolean moveToPrevious() {
249        return moveToPosition(mPos - 1); 
         // mPos looks like is the index here which is an int
250    }

moveToPosition

195      public final boolean moveToPosition(int position) {
196        // Make sure position is not past the end of the cursor
197        final int count = getCount();
198        if (position >= count) {
199            mPos = count;
200            return false;
201        }
202
203        // Make sure position isn't before the beginning of the cursor
204        if (position < 0) {
205            mPos = -1;
206            return false;
207        }
208
209        // Check for no-op moves, and skip the rest of the work for them
210        if (position == mPos) {
211            return true;
212        }

getCount()

返回行集中光标的当前位置。该值从零开始。首次返回行集时,光标将位于第一行之前的位置-1。返回最后一行后,再次调用next()会使光标超过最后一个条目,位于count()的位置。

返回: 当前光标位置。

答案 1 :(得分:2)

Android Cursor类确实首先将所有结果记录读入内存,然后允许您随机单步执行它们。

(这就是为什么游标中的数据有1 MB的限制。)