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

转载 2011年08月16日 07:22:45
    Android 中涉及数据库查询的地方一般都会有一个 query() 方法,而这些 query中有大都(全部?)会有一个参数 selectionArgs,比如下面这个android.database.sqlite.SQLiteDatabase.query():

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 并不多见,更多的情况下要在运行时动态生成这个字符串,比如:
public doQuery(long id, final String name) {
  mDb.query("some_table", // table name 
        null, // columns
        "id=" + id + " AND name='" + name + "'", // selection
         //...... 更多参数省略
  );
}

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

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

public void doQuery(long id, final String name) {
  mDb.query("some_table", // table name 
        null, // columns
        "id=" + id + " AND name=?", // selection
        new String[] {name}, //selectionArgs
         //...... 更多参数省略
  );
  // ...... 更多代码
}

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

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

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

}

http://blog.csdn.net/uoyevoli/article/details/4970860

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

Android 中涉及数据库查询的地方一般都会有一个 query() 方法,而这些 query 中有大都(全部?)会有一个参数 selectionArgs,比如下面这个 android.databas...
  • uoyevoli
  • uoyevoli
  • 2009年12月09日 13:11
  • 57774

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

转自:http://notfatboy.iteye.com/blog/653357首先我们假设我们有如下表格,表格名称“Employees”: IdLastNameFirstNameAddressCi...
  • scorplopan
  • scorplopan
  • 2011年04月05日 22:15
  • 70386

在sqlite中执行'in'查询操作,如何使用selectionargs匹配多个值

在安卓开发中,经常使用到sqlite作为本地持久化存储的解决方案。在androidSDK中,已经为我们提供了各种各样的增、删、改、查的api,尽管我们可以自己写sql语句然后执行db.rawsql()...
  • fkaking
  • fkaking
  • 2015年04月07日 18:35
  • 4019

android SQL 语句

基础  创建数据库  创建之前判断该数据库是否存在  if exists (select * from sysdatabases where name='databaseName')  drop da...
  • robertcpp
  • robertcpp
  • 2014年01月14日 14:03
  • 3641

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

Android 中涉及数据库查询的地方一般都会有一个 query() 方法,而这些 query中有大都(全部?)会有一个参数 selectionArgs,比如下面这个android.database....
  • eustoma
  • eustoma
  • 2011年08月16日 07:22
  • 8465

Android之——多线程断点续传下载示例

在上一篇博文中,我们讲解了如何实现Android的多线程下载功能,通过将整个文件分成多个数据块,开启多个线程,让每个线程分别下载一个相应的数据块来实现多线程下载的功能。多线程下载中,可以将下载这个耗时...
  • l1028386804
  • l1028386804
  • 2015年07月15日 21:02
  • 3025

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从零开始(18)(多线程下载-下)(新)

多线程断点下载思路 1 加入断点功能 要知道每条线程的下载记录 数据库  SqliteDatabase    SqliteOpenHepler download.d...
  • ljx19900116
  • ljx19900116
  • 2014年12月30日 20:42
  • 576

Android之四大组件、六大布局、五大存储

一.四大组件:          Android四大组件分别为activity、service、content provider、broadcast receiver。 一、android四大组...
  • shenggaofei
  • shenggaofei
  • 2016年09月06日 16:15
  • 36262
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 中数据库查询方法query()中的selectionArgs的用法
举报原因:
原因补充:

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