android: SQLite查詢數據

掌握了查詢數據的方法以後,你也就將數據庫的 CRUD 操 做所有學完了。不過千萬不要所以而放鬆,由於查詢數據也是在 CRUD 中最複雜的一種 操做。android

咱們都知道 SQL 的全稱是 Structured Query Language,翻譯成中文就是結構化查詢語言。 它的大部功能都是體如今「查」這個字上的,而「增刪改」只是其中的一小部分功能。因爲 SQL 查詢涉及的內容實在是太多了,所以在這裏我不許備對它展開來說解,而是隻會介紹 Android 上的查詢功能。若是你對 SQL 語言很是感興趣,能夠找一本專門介紹 SQL 的書進 行學習。數據庫

相信你已經猜到了,SQLiteDatabase 中還提供了一個 query()方法用於對數據進行查詢。 這個方法的參數很是複雜,最短的一個方法重載也須要傳入七個參數。那咱們就先來看一下 這七個參數各自的含義吧,第一個參數不用說,固然仍是表名,表示咱們但願從哪張表中查 詢數據。第二個參數用於指定去查詢哪幾列,若是不指定則默認查詢全部列。第3、第四個 參數用於去約束查詢某一行或某幾行的數據,不指定則默認是查詢全部行的數據。第五個參 數用於指定須要去 group by 的列,不指定則表示不對查詢結果進行 group by 操做。第六個參 數用於對 group by 以後的數據進行進一步的過濾,不指定則表示不進行過濾。第七個參數用 於指定查詢結果的排序方式,不指定則表示使用默認的排序方式。更多詳細的內容能夠參考 下表。其餘幾個 query()方法的重載其實也大同小異,你能夠本身去研究一下,這裏就再也不 進行介紹了。ide

 

 

 

query()方法參數學習

對應 SQL 部分this

描述spa

table翻譯

from table_name指針

指定查詢的表名xml

columns對象

select column1, column2

指定查詢的列名

selection

where column = value

指定 where 的約束條件

selectionArgs

-

爲 where 中的佔位符提供具體的值

groupBy

group by column

指定須要 group by 的列

having

having column = value

對 group by 後的結果進一步約束

orderBy

order by column1, column2

指定查詢結果的排序方式

 

 

雖然 query()方法的參數很是多,可是不要對它產生畏懼,由於咱們沒必要爲每條查詢語

句都指定上全部的參數,多數狀況下只須要傳入少數幾個參數就能夠完成查詢操做了。調用

query()方法後會返回一個 Cursor 對象,查詢到的全部數據都將從這個對象中取出。 下面仍是讓咱們經過例子的方式來體驗一下查詢數據的具體用法,修改 activity_main.xml

中的代碼,以下所示:

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"

android:orientation="vertical" >

 

……

 

 

<Button android:id="@+id/query_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Query data"/>

</LinearLayout>

這個已經沒什麼好說的了,添加了一個按鈕用於查詢數據。而後修改 MainActivity 中的 代碼,以下所示:

 

public class MainActivity extends Activity {

 

private MyDatabaseHelper dbHelper;

 

@Override

 

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);

……

Button queryButton = (Button) findViewById(R.id.query_data);

queryButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

SQLiteDatabase db = dbHelper.getWritableDatabase();

// 查詢Book表中全部的數據

Cursor cursor = db.query("Book", null, null, null, null, null, null);

if (cursor.moveToFirst()) {

do {

// 遍歷Cursor對象,取出數據並打印

String name = cursor.getString(cursor. getColumnIndex("name"));

String author = cursor.getString(cursor.

getColumnIndex("author"));

int pages = cursor.getInt(cursor.getColumnIndex("pages"));

 

double price = cursor.getDouble(cursor.

 

getColumnIndex("price"));

Log.d("MainActivity", "book name is " + name); Log.d("MainActivity", "book author is " + author); Log.d("MainActivity", "book pages is " + pages); Log.d("MainActivity", "book price is " + price);

}

while (cursor.moveToNext());

 

 }});}


}

cursor.close();

 

 

}

能夠看到,咱們首先在查詢按鈕的點擊事件裏面調用了 SQLiteDatabase 的 query()方法 去查詢數據。這裏的 query()方法很是簡單,只是使用了第一個參數指明去查詢 Book 表,後 面的參數所有爲 null。這就表示但願查詢這張表中的全部數據,雖然這張表中目前只剩下一 條數據了。查詢完以後就獲得了一個 Cursor 對象,接着咱們調用它的 moveToFirst()方法將數據的指針移動到第一行的位置,而後進入了一個循環當中,去遍歷查詢到的每一行數據。在這個循環中能夠經過 Cursor 的 getColumnIndex()方法獲取到某一列在表中對應的位置索引, 而後將這個索引傳入到相應的取值方法中,就能夠獲得從數據庫中讀取到的數據了。接着我 們使用 Log 的方式將取出的數據打印出來,藉此來檢查一下讀取工做有沒有成功完成。最後 別忘了調用 close()方法來關閉 Cursor。

好了,如今再次從新運行程序,界面如圖 6.27 所示。

圖   6.27

 

點擊一下 Query data 按鈕後,查看 LogCat 的打印內容,結果如圖 6.28 所示。

 

圖   6.28

 

能夠看到,這裏已經將 Book 表中惟一的一條數據成功地讀取出來了。

相關文章
相關標籤/搜索