过滤自定义ContentProvider函数中的输入

时间:2010-12-26 19:34:36

标签: sql android android-contentprovider

在自定义ContentProvider中,我需要过滤掉输入中指定的某些列。鉴于面向文本的Android界面,这让我很难过。

例如MyContentProvider.query()上的输入会有效地询问:

SELECT column_a, column_b FROM my_table WHERE column_a=1 AND column_b=red;

问题是,在这个特定的MyContentProvider _column_b_可能没有任何意义,并且不会出现在表中。过滤投影以便只保留相关列,因为它是String []。但是,为这些列过滤字符串“where”(选择)和“selectionArgs”输入并非易事。如果做得好,它将成为:

SELECT column_a FROM my_table WHERE column_a=1;

否则会得到SQLiteException "no such column"

那么,有没有从这样的sql语句中忽略或过滤列的简单方法,还是我需要为选择部分写一些非常有限的regexp解析代码?

我没有获得正确输入的原因是因为我维护了一个自定义ContentProvider作为要解决的接口,但我在这里与多个自定义ContentProvider进行了交谈(在后台)。无论如何,我需要在某处过滤选择。

请注意,我不是简单地询问如何进行查询或使用SELECT ... WHERE语句。但是它涉及我对query()函数的实现。

1 个答案:

答案 0 :(得分:0)

由于您使用MyContentProvider扩展ContentProvider,为什么不重载query()方法?

查看ContentProvider - Sharing Content using the ContentProvider有关如何创建自定义ContentProvider的其他人的示例。您应完全控制从SQLiteDatabase获取的数据。

更重要的是,请查看arguments providedquery(),因为它们包含您需要的信息,您可以通过这种方式动态构建查询,并将其传递给方法调用。< / p>

根据您是否能找到一个好的查询构建器,您有机会构建一个小而强大的抽象层来构建您的查询,以便最大限度地减少您自己编写的实际SQL的数量。

另外,请务必记住清理输入!