Android 中数据库查询方法 query() 中的参数

转载 2015年07月08日 11:52:47

Android 中涉及数据库查询的地方一般都会有一个 query() 方法,而这些 query 中有大都(全部?)会有一个参数 selectionArgs,比如下面这个 android.database.sqlite.SQLiteDatabase.query():

[java] view plaincopy
  1. public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)  
 

    selection 参数很好理解,就是 SQL 语句中 WHERE 后面的部分,即过滤条件, 比如可以为 id=3 AND name='Kevin Yuan' 表示只返回满足 id 为 3 且 name 为 "Kevin Yuan" 的记录。

    再实际项目中像上面那样简单的“静态”的 selection 并不多见,更多的情况下要在运行时动态生成这个字符串,比如

[java] view plaincopy
  1. public doQuery(long id, final String name) {  
  2.   mDb.query("some_table"// table name   
  3.         null// columns  
  4.         "id=" + id + " AND name='" + name + "'"// selection  
  5.          //...... 更多参数省略  
  6.   );  
  7. }  
 

在这种情况下就要考虑一个字符转义的问题,比如如果在上面代码中传进来的 name 参数的内容里面有单引号('),就会引发一个 "SQLiteException syntax error .... "。

     手工处理转义的话,也不麻烦,就是 String.replace() 调用而已。但是 Android SDK 为我们准备了selectionArgs 来专门处理这种问题:

[java] view plaincopy
  1. public void doQuery(long id, final String name) {  
  2.   mDb.query("some_table"// table name   
  3.         null// columns  
  4.         "id=" + id + " AND name=?"// selection  
  5.         new String[] {name}, //selectionArgs  
  6.          //...... 更多参数省略  
  7.   );  
  8.   // ...... 更多代码  
  9. }  
 

也就是说我们在 selection 中需要嵌入字符串的地方用 ? 代替,然后在 selectionArgs 中依次提供各个用于替换的值就可以了。在 query() 执行时会对 selectionArgs 中的字符串正确转义并替换到对应的 ? 处以构成完整的 selection 字符串。 有点像 String.format()。

    不过需要注意的是 ? 并不是“万金油”,只能用在原本应该是字符串出现的地方。比如下面的用法是错误的

 

[java] view plaincopy
  1. public void doQuery(long id, final String name) {  
  2.   mDb.query("some_table"// table name   
  3.         null// columns  
  4.         "? = " + id + " AND name=?"// selection XXXX 错误!? 不能用来替换字段名  
  5.         new String[]{"id", name}, //selectionArgs  
  6.       //...... 更多参数省略  
  7.   );  
  8.   // ...... 更多代码  
  9. }  

Android 数据存储——数据查询query方法参数解析

参考链接:http://notfatboy.iteye.com/blog/653357 首先假设有如下表格,表格名称为:"Employees" SQL基本格式如下: select 列名称 from...
  • Thanksgining
  • Thanksgining
  • 2015年02月05日 10:35
  • 5361

自己的笔记___摘自别人(Android数据库中查找一条数据 query方法详解)

public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String gro...
  • yogurt423
  • yogurt423
  • 2015年12月14日 15:34
  • 179

Android中ContentResolver的query方法中参数的详细解析

例:获取联系人姓名 一个简单的例子,这个函数获取设备上所有的联系人ID和联系人NAME。 public void fetchAllContacts() {       Content...
  • flymoon1201
  • flymoon1201
  • 2014年12月03日 10:59
  • 1014

Android 中数据库查询方法query()中的selectionArgs的用法

Android 中涉及数据库查询的地方一般都会有一个 query() 方法,而这些 query中有大都(全部?)会有一个参数 selectionArgs,比如下面这个android.database....
  • cadi2011
  • cadi2011
  • 2015年09月30日 15:42
  • 158

Android 中数据库查询方法 query() 中的 selectionArgs 的用法

http://blog.csdn.net/uoyevoli/article/details/4970860  Android 中涉及数据库查询的地方一般都会有一个 query() 方法,而这些 qu...
  • victoryckl
  • victoryckl
  • 2013年10月12日 12:55
  • 2003

Android 中数据库查询方法 query() 中的 select

Android 中涉及数据库查询的地方一般都会有一个 query() 方法,而这些 query 中有大都(全部?)会有一个参数 selectionArgs,比如下面这个 android.databas...
  • feixuejianhun
  • feixuejianhun
  • 2012年04月05日 01:51
  • 171

Android 中数据库查询方法query()中的selectionArgs参数解析

Android 中涉及数据库查询的地方一般都会有一个 query() 方法,而这些 query中有大都(全部?)会有一个参数 selectionArgs,比如下面这个android.database....
  • abc86319253
  • abc86319253
  • 2014年03月18日 11:14
  • 688

uiautomator中QueryControlller学习笔记(9)

QueryController主要是和UiSelector提供服务的类,
  • qhshiniba
  • qhshiniba
  • 2014年04月20日 14:05
  • 2499

Android数据库中查找一条数据使用的方法 query详解

public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String gro...
  • Ada168855
  • Ada168855
  • 2013年01月07日 11:00
  • 3222

Android自带SQLite数据库查询语句query的用法

金证职考 2017-02-26 19:39 今天在调试APP的时候,用到了SQLite的query 查询语句,去年编码时间紧没认真琢磨query的用法,当时用到query时为了省事省时直接用下面的:...
  • u011277123
  • u011277123
  • 2017年04月07日 16:24
  • 1937
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 中数据库查询方法 query() 中的参数
举报原因:
原因补充:

(最多只允许输入30个字)