繁体   English   中英

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

[英]Filter inputs in custom ContentProvider functions

在自定义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()函数的实现。

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

查看ContentProvider - 使用ContentProvider共享内容,以获取有关如何创建自定义ContentProvider的其他人的示例。 您应该完全控制从SQLiteDatabase获取的数据。

更重要的是,查看提供query()参数 ,因为它们包含您需要的信息,您可以通过这种方式从传递给方法调用的内容中动态构建查询。

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

此外,请记住清理您的输入!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM