2012-09-09 120 views
0

我想在我的ContentProvider中使用SQLiteStatement而不是rawQuery或其他标准方法之一。我认为使用SQLiteStatement会给查询带来更自然,更原生,更高效,更不容易出错的方法。从SQLiteStatement创建光标

问题是我没有看到生成并返回Cursor的方法。我意识到我可以使用“调用”并返回Bundle,但该方法要求我缓存并同时返回所有选定的行 - 这可能很大。

我将开始查看Android源代码 - 我推测“查询”最终使用SQLiteStatement并以某种方式生成Cursor。但是,如果任何人有任何指示或知识,我将不胜感激您的分享。

回答

2

我想在我的ContentProvider中使用SQLiteStatement而不是rawQuery或其他标准方法之一。我认为使用SQLiteStatement会给查询带来更自然,更原生,更高效,更不容易出错的方法。

引用的文档SQLiteStatement

语句不能返回多个行或列,但单个值被支撑(1×1)的结果集。

我不明白你为什么会用ContentProvider为单排,单柱结果打扰,但是,嘿,这是你的应用程序...

的问题是,我没有看到一种生成和返回光标的方法

创建一个MatrixCursor并填写单个结果。

+0

啊,我明白了,他们让SQLiteStatement非常有限。所以,这使得ContentProvider与这个问题无关(我可能不会使用它,但这是一个不同的话题)。所以,我现在正在查看SQLLiteDirectCursorDriver的源代码,看看是否值得重写bindAllArgsAsStrings。这实际上是我的问题的关键 - 正确地绑定参数,并且不会遇到某些问题,如果将某些内容视为其他内容,则将其视为文本。 –

+0

使用rawQuery似乎工作正常。我看到一些人们在where子句中比较inint时遇到困难的帖子,但我没有任何这样的麻烦(还没有)。事实上,我认为这种安排非常好 - 我在“合同”文件中有一堆db包装器,它将应用程序中的所有列名称和数据库特定的东西隔离开来。如果有人想使用这个例子,可以张贴。 –