为什么selectionArgs必须是String数组?

时间:2015-03-10 08:05:03

标签: android sqlite

我在堆栈溢出中回答了一个问题,提出问题的用户问我:
SQlite Query in android using cursor

  

为什么我必须给我的selectionArgs一个数组而不是一个值?

我之前没有考虑过这个问题,现在也是我的问题。 当数据库查询中selectionArgs只有一个值时,我们必须使用数组吗? (我希望我的问题在正确的地方正确)

1 个答案:

答案 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。