模糊查找 再深入

模糊查找 再深入

 

应某位大哥要求 再次对 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~~~

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值