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()中的selectionArgs参数解析

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

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

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

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

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

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

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

Android 数据库查询query函数参数解析

首先我们假设我们有如下表格,表格名称“Employees”:   Id LastName FirstName Address City 1 Adams Joh...

数据库查询方法的进步

数据库查询方法。(2002届本科生毕业论文要求有开题报告,文献综述,和两篇翻译。此为翻译一。当时学的制造业,IT业热,就出家了。借鉴了很多别人的东西,惭愧。先自我揭露。放在这里,还有一个作用就是避免丢...
  • xuhx
  • xuhx
  • 2011-01-01 01:35
  • 628

python django 数据库查询方法总结

一插入数据库用save方法实现如下 二更新数据库也用save方法实现如下 三检索对象 四用Q对象实现复杂的查询 五比较对象 六删除 七一次更新多个值 原文地址:http://www.cnblogs.c...

python django 数据库查询方法总结

__exact 精确等于 like ‘aaa’ __iexact 精确等于 忽略大小写 ilike ‘aaa’ __contains 包含 like ‘%aaa%’ __icontains 包含...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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