Android學習過程的Cursor遊標填坑筆記

Joerrot發表於2018-09-04

最近在網上看了如下程式碼:

通過在資料庫中查詢資料(字串):

   private boolean hasData(String tempName) {
        // 從資料庫中Record表裡找到name=tempName的id
        Cursor cursor = helper.getReadableDatabase().rawQuery(
                "select id as _id,name from records where name =?", new String[]{tempName});
        //  判斷是否有下一個
        return cursor.moveToNext();
    }

其實,Cursor(遊標)可以看成一個指標,它會通過指向某一行(代表行的集合),然後才來取出資料,說是這麼說,然而,如果沒有在一開始將cursor進行moveToFirst()的話,它就會指向第一行資料的前面,也就是下標為-1的位置,此時直接進行資料提取,執行之後就會爆出異常。

分析上面程式:

如果查詢到了資料,cursor就會指向該行資料的前一行的位置,比如查到了第三行(行下標為2)的資料,那麼Cursor指向的就是下標為1的位置,那麼進行moveToNext()(此行正帶有需要的資料)就會返回true。

如果像這樣:(推薦的做法)一開始就已經進行moveToFirst(),那麼Cursor就會指向第一行資料(也就是下標為0的位置)。

所以,當cursor.moveToNext() 為假時將跳出迴圈,即 Cursor 資料迴圈完畢。

好吧,順便記記怎麼取資料吧:

當我們要取出cursor物件中的一個對應的資料,首先我們要先確定它的資料型別,用cursor.getxxx()。xxx代表的是你要取出的資料的資料型別,比如要取出的資料型別為String型別,那麼就可以用cursor.getString()。

然後我們確定了資料型別後,肯定要確定列名,所以我們要得到cursor物件中的列名,用cursor.getColumnIndex("列名")來獲得。

這樣的我們要的資料,就可以用cursor.getString(cursor.getColumnIndex("列名"))來獲得。

下面順便說說幾個常見的函式:

getCount()    //返回結果集中的行數。
getColumnCount()    //返回所有列的總數
isClosed()    //如果為TRUE表示該遊標已關閉  
close()    //關閉遊標,且釋放資源  
moveToLast()    //移動游標到最後一行  
moveToPrevious()    //移動游標到上一行    
getColumnName(columnIndex)    //從給定的索引返回列名  
moveToPosition(position)    //移動游標到給定位置  

相關文章