almost 3 years ago

好了,今天要分享的是如何取得資料。

SQLite取回來的資料基本上都是Cursor型態,我們可以把它想成一張表格即可。

假設我們資料表長這樣:

RowId Name Phone
1 Jack 0971201265
2 Kuo 077521656
3 AssGuy 080808665

取得全部的資料

public Cursor getInfO(SQLiteDatabase db) {
        return  db.query(INFO_TABLE, new String[] {ROW_ID, NAME, PHONE}, null, null, null, null, null);
}

Cursor使用方法

MySQLiteManager mSQLiteManager = new MySQLiteManager(this);

Cursor mCursor = mSQLiteManager.getInfo(mSQLiteManager.getReadableDatabase());

if(mCursor != null) {
    mCursor.moveToFirst();
  for(int i = 0 ; i < mCursor.getCount() ; i++) {
    //Do Something

         mCursor.moverToNext();
  }
}

使用上述的方法就可以將每一筆資料取出,但肯定有人會疑惑,如果我有很多資料,每次都要取出這麼多,

不可以取出特定幾個就好嗎? 當然可以,原先得SQL語法便有支援許多種方法。

使用其他方法取得資料

在這部分開始之前,我想要先讓大家了解一下SQL語法,這是開發者操空SQL不可或缺的部分

我覺得這網站寫得很簡潔,大家可以去參考一下

1KD SQL語法

通常都是使用Where、And、Between這三大類是比較常使用到的。

使用索引值取得特定資料

取出指定項目
db.query(INFO_TABLE, new String[] {ROW_ID, NAME, PHONE}, ROW_ID + "=?", new String[] {rowId},
          null, null, null, null);
取出">"多少的項目
db.query(INFO_TABLE, new String[] {ROW_ID, NAME, PHONE}, ROW_ID + ">?", new String[] {num},
          null, null, null, null);
取出">"並且"<"多少的項目
db.query(INFO_TABLE, new String[] {ROW_ID, NAME, PHONE}, ROW_ID + ">? AND " + ROW_ID + "<?", 
                    new String[] {num_1, num_2}, null, null, null, null);

日期與SQL語法

日期也是我們常常判定的方法,那麼在SQLite儲存日期格式通常都使用

  1. 2016-01-10
  2. 2016/01/10

格式通常為這兩種較多,當然也有其他種類,這部分就不多加說明了,有興趣的可以自行去觀看。

月(MONTH) 與 日(DAY),這兩個地方必須是雙位數,不能因為數字小於10而不向前補0。

例如: 2016-1-10、2016/1/8

這樣子會讓SQL判斷上有許多的失誤,也許有時候不會發生,但總有一天會輪到你的。

搜尋某日其範圍內的資料
db.query(INFO_TABLE, new String[] {ROW_ID, NAME, PHONE, DATE}, 
                    DATE + " BETWEEN ? AND ?", 
                    new String[]{startDate, endDate}, 
                    null, null, null, null);

當然這邊我想不僅僅是可以搜尋某日期範圍,我們更可以貼加一些複加條件,像是"Name"要為"Jack"等等,

那麼我這篇文章就分享到這邊,當然還想分享更多方法,但我想,魚還是自己多多釣會比較能夠成長,不是嗎?

本魯已經放好路給你走了,走好走滿,不要半途而廢,若有任何問題歡迎寄信通知我。

下一篇文章將會介紹onUpgrade,更新資料庫的方法。

← [Android] 手把手的教你使用 SQLite (2) - 新增、修改、刪除等資料 [Android] 手把手的教你使用 SQLite (4) - 更新資料庫 →
 
comments powered by Disqus