模糊查找 再深入

模糊查找 再深入

 

應某位大哥要求 再次對 SQLite::query(...) 學習了一番 有點心得  不敢獨吞 與大家討論之

 

 

 

[前言]

 

本例打算以android系統聯繫人爲例演示 該聯繫人記錄初始數據爲:

 

 

 

 

[代碼 步驟]

 

1. 自定義 即:不使用系統提供的query(...)  爲什麼:因爲開始也不清楚系統query(...) 各參數所代表含義 只能自己擴展之

 

* 通過ContentResolver 查詢目標Uri 返回Cursor

 

Cursor c = getContentResolver().query(People.CONTENT_URI, 
                null, null, null, null);

 

 

* 定義query2ByCursor(Cursor c,String columnName,String filter )  現一一說明各參數意思

 

函數參數解釋:

 

String[] query2ByCursor(Cursor c,String columnName,String filter )


1. paras:

- Cursor c : 查詢目標

- String columnName : 模糊查詢目標的索引列名 i.g. 查詢所有聯繫人中 記錄名字含有字串"sh"的名單 那麼該值應爲:"名單" 即"People.NAME"

- String filter : 模糊查詢設置的條件 i.g. 上面例子中 該值應爲"sh"


2. return: 返回所有匹配查詢條件的記錄

 

 

 

函數實現爲:

 

public String[] query2ByCursor(Cursor c,String columnName,String filter){
    	List<String> vlist = new ArrayList<String>();
    	
    	for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
    		int iNameIndex = c.getColumnIndex(columnName);
    		String string = c.getString(iNameIndex);
    		
    		if(string.contains(filter)){
    			vlist.add(string);
    		}
    		
    	}
    	
    	String[] result = new String[vlist.size()];
    	vlist.toArray(result);
    	
    	return result;
    }

 

 

函數使用爲: 還是以那個例子爲例 其具體傳遞參數

 

String[] data = query2ByCursor(c,People.NAME,"sh");

 

 

其他 包括:使用String[] 並顯示值

 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
        
        setListAdapter(adapter);

 

 

emulator 運行截圖:

 

 

 

 

 

2.  以上是使用自擴展函數 下面說說怎麼利用系統提供query(...) 還是那個問題

 

 

Cursor c = getContentResolver().query(People.CONTENT_URI, 
                null, "name like '%sh%'", null, null);

 

模糊查找:

String selection: "name like '%sh%'"



意思: 查找所有列名爲: name  且其包含字串"sh" 的記錄 %匹配所有字串

 

 

 

3. 下面在介紹下一個參數: String[] selectionArg 的使用情況

 

使用說明:

其會替代參數String selection 中的 '?' 且依次代替

 

 

例子: 查找名字爲"griffin" 或者 "nichlas" 的記錄 則:函數及參數爲:

 

Cursor c = getContentResolver().query(People.CONTENT_URI, 
                null, "name = ? or name = ?", new String[]{"griffin","nichlas"}, null);

 

 

其等效於:

 

Cursor c = getContentResolver().query(People.CONTENT_URI, 
                null, "name = griffin or name = nichlas", null, null);

 

 

 

 

其實 ContentResolver.query(....) 用法 遵循與SQLite.query(...)

 

 

any idea or other are welxome~~~

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章