Android Cursor(遊標)

關於遊標的知識點

  1. SQLite執行查詢後返回Cursor對象
  2. Cursor 是一個隨機的數據源。
  3. Cursor 是每行的集合。
  4. 使用 moveToFirst() 定位第一行。
  5. 你必須知道每一列的名稱和數據類型。
  6. 所有的數據都是通過下標取得。

遊標內容

Cursor:遊標接口,提供了遍歷查詢結果的方法。

【你可以Cursor cursor =new Cursor()這樣就可以看見他所有的方法】

常用方法:

getCount() 總記錄數

isFirst() 判斷是否第一條記錄

isLast() 判斷是否最後一條記錄

moveToFirst() 移動到第一條記錄

moveToLast() 移動到最後一條記錄

move(int offset) 移動到指定記錄

moveToNext() 移動到下一條記錄

moveToPrevious() 移動到上一條記錄

getColumnIndexOrThrow(String columnName) 根據列名獲取列索引

getInt(int columnIndex) 獲取指定索引的int類型值

getString(int columnIndex) 獲取指定列索引的String類型值

isBeforeFirst() 返回遊標是否指向之前第一行的位置

isAfterLast() 返回遊標是否指向第最後一行的位置

注意問題

Cursor是Android查詢數據後得到的一個管理數據集合的類,正常情況下,如果查詢得到的數據量較小時不會有內存問題,而且虛擬機能夠保證Cursor最終會被釋放掉。
然而如果Cursor的數據量特別大,特別是如果裏面有Blob信息時,應該保證Cursor佔用的內存被及時的釋放掉,而不是等到GC來處理.並且Android明顯是傾向於編程者手動的將Cursor close掉,因爲在源代碼中我們發現。如果等到垃圾收集器來回收時,也就是如果不手動關閉時,系統會報錯,會給用戶以錯誤提示。

關閉遊標的正確方式

Cursor c; 
try { 
c = queryCursor(); 
int a = c.getInt(1); 
...... 
// 如果出錯,後面的cursor.close()將不會執行 
//c.close(); 
} catch (Exception e) { 
} finally{ 
if (c != null) { 
c.close(); 
} 
} 

附:

Activity.startManagingCursor//方法

將獲得的Cursor對象交與Activity管理,這樣Cursor對象的生命週期便能與當前的Activity自動同步,省去了自己對Cursor的管理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章