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
  • 56226

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

转自:http://notfatboy.iteye.com/blog/653357首先我们假设我们有如下表格,表格名称“Employees”: IdLastNameFirstNameAddressCi...

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

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

android query方法各个参数的含义

query(table,columns, selection, selectionArgs, groupBy, having, orderBy, limit)方法各参数的含义: table:表名...

认识*.so里的JNI_OnLoad()函数

当Android的VM(Virtual Machine)执行到C组件(即*so档)里的System.loadLibrary()函数时,首先会去执行C组件里的JNI_OnLoad()函数。它的用途有二:...

Android开发之媒体扫描详细解析(上)

之前在看视频的时候一直不明白为什么可以直接从手机中扫描出视频和音乐,今天看了这篇博文才觉悟,感谢写这篇文章的博主!...

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

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

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

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

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

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

java连接数据库查询方法演示文稿

  • 2007年12月25日 02:24
  • 487KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 中数据库查询方法query()中的selectionArgs的用法
举报原因:
原因补充:

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