我在堆栈溢出中回答了一个问题,提出问题的用户问我:
SQlite Query in android using cursor
为什么我必须给我的selectionArgs一个数组而不是一个值?
我之前没有考虑过这个问题,现在也是我的问题。
当数据库查询中selectionArgs
只有一个值时,我们必须使用数组吗?
(我希望我的问题在正确的地方正确)
答案 0 :(得分:1)
这是relevant documentation。基本上,String[] selectionArgs
是一个数组,因此您可以为sql WHERE子句创建一个或多个参数。由于这些参数在database.query()
方法中使用,因此它们实际上构建了一个由SQLite运行的原始SQL查询字符串。在String selection
参数中,指定所有WHERE子句列名,如下所示:
String selection = "DefaultId =? OR Name=?";
对于?
中的每个selection
,相应的WHERE值将从您的selectionArgs
数组中替换。所以,你应该有这样的东西:
String[] selectionArgs = new String[]{"567", "Bob"};
database.query()
方法针对selectionArgs
中找到的每个?
迭代selection
。因此,数组大小应与?
中使用的selection
占位符数相匹配。 (如果?
值比selectionArgs
更多,那么我相信null
会被替换。我虽然没有验证过。)
所以基本上,因为可以将多个WHERE值替换为selection
,这就是为什么selectionArgs
是一个数组而不是一个简单的String。