Android學習過程的Cursor遊標填坑筆記
阿新 • • 發佈:2018-12-26
最近在網上看了如下程式碼:
通過在資料庫中查詢資料(字串):
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) //移動游標到給定位置