2011年6月2日 星期四

Android學習_對SQLite查詢(query方法)取得Cursor

對SQLite查詢只有兩行語法:
第一行是取得資料庫(寫在該篇的Ola_SQLiteOpenHelper內,所以可以用this直接取得)。
第二行就是類似於SQL語法的查詢方式,分別是哪張表、哪幾欄、條件式、條件式的篩選值、groupBy、having與 orderBy

SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);


從上圖可以看出columns與selectionArgs是傳入陣列型態,所以我們可以以陣列的方式放入需要查的各個欄位名稱或是我們所下的條件式的篩選內容。

就像上圖"f_name=? and f_address=?"為篩選條件,query方法就會依照陣列順序填入問號(?)當中,來達到多條件篩選的目的。(上圖Select為自訂呼叫query的方法,參數相同。)

另外一個重點是query所傳回的型態為android.database.Cursor,可以把他想像成Dataset,可以利用Cursor原本提供的多個方法來取得該Cursor的基本資料,如:
得到資料表欄位總數:OlaCursor.getColumnCount()
得到傳回資料表的資料筆數:OlaCursor.getCount()
得到資料表第index欄的欄名:OlaCursor.getColumnName(0)
得到欄名為name的index:OlaCursor.getColumnIndex("name")

當然我們就可以利用if(OlaCursor.getCount()>0)來確認是否有取到資料,來確保資料顯示不會出錯;另一個重點是Cursor取得後,他的指標是在第-1筆,也就是直接利用Cursor.getString(0)等方式來取資料會出現錯誤。必須先使用Cursor.moveToFirst()(到第一筆)或是Cursor.moveToNext()到下一筆的方式將指標移至第0筆。當然也可以用while迴圈的方式去取得資料。

while (Cursor.moveToNext())
{
Value += Cursor.getString(0) + "\n";
}

所以不管是要抓取全部的資料,或是有條件的篩選都可以很方便的取得Cursor。

沒有留言:

張貼留言