Android中cursor類的使用

來源:互聯網
上載者:User

android中從資料庫中查出來的資料一般都存在cursor中即:Cursor mCursor = mSQLiteDatabase.query("select * form table", null),說白了就是一個資料集合,具體的說就是每行資料集合,下面是api中對cursor的解釋

關於 Cursor,

 1,Cursor 是每行的集合。

 2,使用 moveToFirst() 定位第一行。  

 3,Cursor 是一個隨機的資料來源。

 4,所有的資料都是通過下標取得。

 

Cursor 的一些方法,

  • close()
    關閉遊標,釋放資源
  • copyStringToBuffer(int
    columnIndex,CharArrayBuffer
    buffer)
    在緩衝區中檢索請求的列的文本,將將其儲存
  • getColumnCount()
    返回所有列的總數
  • getColumnIndex(String
    columnName)
    返回指定列的索引,如果不存在返回-1
  • getColumnIndexOrThrow(String
    columnName)
    從零開始返回指定列名稱,如果不存在將拋出IllegalArgumentException
    異常。
  • getColumnName(int
    columnIndex)
    從給定的索引返回列名
  • getColumnNames()
    返回一個字串數組的列名
  • getCount()
    返回Cursor 中的行數
  • moveToFirst()
    移動游標到第一行
  • moveToLast()
    移動游標到最後一行
  • moveToNext()
    移動游標到下一行
  • moveToPosition(int
    position)
    移動游標到一個絕對的位置
  • moveToPrevious()
    移動游標到上一行

     

    1 看些這幾行代碼一般是判斷Cursor是否為空白,也就是沒資料

    [java]
    view plaincopy
    1. if (cur.moveToFirst() == false)  
    2. {  
    3. //為空白的Cursor  
    4.  return;  
    5. }  

    或者

    [java]
    view plaincopy
    1. if (null != cur ){  
    2.         
    3. }  

     

    其實第二中方法方便,第一種是為了便於理解

    2 通過Cursor 的下標獲得資料,下標我的理解是每行行的第幾列,下面方法就是獲得某行中某列的資料

    [java]
    view plaincopy
    1. int nameColumnIndex = cur.getColumnIndex("name");  
    2. String name = cur.getString(nameColumnIndex);  

    其中name為列名,首先通過列名稱找出在該行中位於第幾列,通過列索引找出該行中name欄位的值

     

    3,遍曆cursor中每行資料

    [java]
    view plaincopy
    1. while(cur.moveToNext())  
    2. {  
    3. //游標移動成功  
    4. //把資料取出  
    5. }  

    或者

    [java]
    view plaincopy
    1. do {  
    2.   
    3.   
    4.   }while(cur.moveToNext())  

    要是不想用上面這2種迴圈,習慣用for迴圈,google有方法實現for迴圈

     

    [java]
    view plaincopy
    1. for(cur.moveToFirst();!cur.isAfterLast();cur.moveToNext())  
    2. {  
    3.     int nameColumn = cur.getColumnIndex(People.NAME);  
    4.     int phoneColumn = cur.getColumnIndex(People.NUMBER);  
    5.     String name = cur.getString(nameColumn);  
    6.     String phoneNumber = cur.getString(phoneColumn);  
    7. }  

      isBeforeFirst()

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

      isAfterLast()

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

     isClosed()

  • close()
    關閉遊標,釋放資源
  • copyStringToBuffer(int
    columnIndex,CharArrayBuffer
    buffer)
    在緩衝區中檢索請求的列的文本,將將其儲存
  • getColumnCount()
    返回所有列的總數
  • getColumnIndex(String
    columnName)
    返回指定列的索引,如果不存在返回-1
  • getColumnIndexOrThrow(String
    columnName)
    從零開始返回指定列名稱,如果不存在將拋出IllegalArgumentException
    異常。
  • getColumnName(int
    columnIndex)
    從給定的索引返回列名
  • getColumnNames()
    返回一個字串數組的列名
  • getCount()
    返回Cursor 中的行數
  • moveToFirst()
    移動游標到第一行
  • moveToLast()
    移動游標到最後一行
  • moveToNext()
    移動游標到下一行
  • moveToPosition(int
    position)
    移動游標到一個絕對的位置
  • moveToPrevious()
    移動游標到上一行

     

    1 看些這幾行代碼一般是判斷Cursor是否為空白,也就是沒資料

    [java]
    view plaincopy
    1. if (cur.moveToFirst() == false)  
    2. {  
    3. //為空白的Cursor  
    4.  return;  
    5. }  

    或者

    [java]
    view plaincopy
    1. if (null != cur ){  
    2.         
    3. }  

     

    其實第二中方法方便,第一種是為了便於理解

    2 通過Cursor 的下標獲得資料,下標我的理解是每行行的第幾列,下面方法就是獲得某行中某列的資料

    [java]
    view plaincopy
    1. int nameColumnIndex = cur.getColumnIndex("name");  
    2. String name = cur.getString(nameColumnIndex);  

    其中name為列名,首先通過列名稱找出在該行中位於第幾列,通過列索引找出該行中name欄位的值

     

    3,遍曆cursor中每行資料

    [java]
    view plaincopy
    1. while(cur.moveToNext())  
    2. {  
    3. //游標移動成功  
    4. //把資料取出  
    5. }  

    或者

    [java]
    view plaincopy
    1. do {  
    2.   
    3.   
    4.   }while(cur.moveToNext())  

    要是不想用上面這2種迴圈,習慣用for迴圈,google有方法實現for迴圈

     

    [java]
    view plaincopy
    1. for(cur.moveToFirst();!cur.isAfterLast();cur.moveToNext())  
    2. {  
    3.     int nameColumn = cur.getColumnIndex(People.NAME);  
    4.     int phoneColumn = cur.getColumnIndex(People.NUMBER);  
    5.     String name = cur.getString(nameColumn);  
    6.     String phoneNumber = cur.getString(phoneColumn);  
    7. }  

      isBeforeFirst()

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

      isAfterLast()

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

     isClosed()

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.