现在的位置: 首页 > 综合 > 正文

模糊查找 再深入 sqlite

2013年12月11日 ⁄ 综合 ⁄ 共 2354字 ⁄ 字号 评论关闭

 

应某位大哥要求 再次对 SQLite::query(...) 学习了一番 有点心得  不敢独吞 与大家讨论之

 

 

 

[前言]

 

本例打算以android系统联系人为例演示 该联系人记录初始数据为:

 

 

 

 

[代码 步骤]

 

1. 自定义 即:不使用系统提供的query(...)  为什么:因为开始也不清楚系统query(...) 各参数所代表含义 只能自己扩展之

 

* 通过ContentResolver 查询目标Uri 返回Cursor

 

Java代码  收藏代码
  1. Cursor c = getContentResolver().query(People.CONTENT_URI,   
  2.                 nullnullnullnull);  

 

 

* 定义query2ByCursor(Cursor c,String columnName,String filter )  现一一说明各参数意思

 

函数参数解释:

 

Java代码  收藏代码
  1. String[] query2ByCursor(Cursor c,String columnName,String filter )  
  2.   
  3.   
  4. 1. paras:  
  5.   
  6. - Cursor c : 查询目标  
  7.   
  8. - String columnName : 模糊查询目标的索引列名 i.g. 查询所有联系人中 记录名字含有字串"sh"的名单 那么该值应为:"名单" 即"People.NAME"  
  9.   
  10. - String filter : 模糊查询设置的条件 i.g. 上面例子中 该值应为"sh"  
  11.   
  12.   
  13. 2return: 返回所有匹配查询条件的记录  

 

 

 

函数实现为:

 

Java代码  收藏代码
  1. public String[] query2ByCursor(Cursor c,String columnName,String filter){  
  2.         List<String> vlist = new ArrayList<String>();  
  3.           
  4.         for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){  
  5.             int iNameIndex = c.getColumnIndex(columnName);  
  6.             String string = c.getString(iNameIndex);  
  7.               
  8.             if(string.contains(filter)){  
  9.                 vlist.add(string);  
  10.             }  
  11.               
  12.         }  
  13.           
  14.         String[] result = new String[vlist.size()];  
  15.         vlist.toArray(result);  
  16.           
  17.         return result;  
  18.     }  

 

 

函数使用为: 还是以那个例子为例 其具体传递参数

 

Java代码  收藏代码
  1. String[] data = query2ByCursor(c,People.NAME,"sh");  

 

 

其他 包括:使用String[] 并显示值

 

Java代码  收藏代码
  1. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);  
  2.           
  3.         setListAdapter(adapter);  

 

 

emulator 运行截图:

 

 

 

 

 

2.  以上是使用自扩展函数 下面说说怎么利用系统提供query(...) 还是那个问题

 

 

Java代码  收藏代码
  1. Cursor c = getContentResolver().query(People.CONTENT_URI,   
  2.                 null"name like '%sh%'"nullnull);  

 

Java代码  收藏代码
  1. 模糊查找:  
  2.   
  3. String selection: "name like '%sh%'"  
  4.   
  5.   
  6.   
  7. 意思: 查找所有列名为: name  且其包含字串"sh" 的记录 %匹配所有字串  

 

 

 

3. 下面在介绍下一个参数: String[] selectionArg 的使用情况

 

Java代码  收藏代码
  1. 使用说明:  
  2.   
  3. 其会替代参数String selection 中的 '?' 且依次代替  

 

 

例子: 查找名字为"griffin" 或者 "nichlas" 的记录 则:函数及参数为:

 

Java代码  收藏代码
  1. Cursor c = getContentResolver().query(People.CONTENT_URI,   
  2.                 null"name = ? or name = ?"new String[]{"griffin","nichlas"}, null);  

 

 

其等效于:

 

Java代码  收藏代码
  1. Cursor c = getContentResolver().query(People.CONTENT_URI,   
  2.                 null"name = griffin or name = nichlas"nullnull);  

 

 

 

 

其实 ContentResolver.query(....) 用法 遵循与SQLite.query(...)

 

 

any idea or other are welxome~~~

抱歉!评论已关闭.