2011-08-21 62 views
18

創建一個標準的SQLite光標後,我迭代通使用的條目:sqlite的:看起來像使用MoveToNext作品,未經moveToFirst需要

while (cursor.moveToNext()) { 
} 

所有行正確處理。 我讀過的所有文檔都指出,您需要發出moveToFirst()以確保 您指向光標集的第一個條目。

這是否正常工作,即使它不應該, 和另一個版本可能沒有相同的處理?

回答

42

不,這是正常工作。 Cursor s從行索引-1開始(在第一行之前)。如果Cursor引用多行,則使用while循環遍歷它們是您首選的方法。它會調用moveToNext(),它將您移至索引0(第一行),然後從那裏開始。

如果您的Cursor只引用一行,您可以在讀取數據之前調用moveToFirst()以確保您處於有效索引。當第一次創建Cursor並且位於索引-1時,moveToFirst()moveToNext()都具有相同的效果。

+0

謝謝!這解釋了爲什麼它始終如一地工作。奇怪的是,我沒有看到任何示例指出這是一種可以通過遊標進行迭代的方式。 – charlest

+4

+1,非常棒的分析。這也是[記錄在這裏](http://developer.android.com/reference/android/database/Cursor.html#getPosition())。 「 – orip

+0

」將您移動到索引0(第一行)「 正確地,它從索引-1移動到索引1,跳過0。 – vitalii

相關問題