2012-09-09 41 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包裝器,它將應用程序中的所有列名稱和數據庫特定的東西隔離開來。如果有人想使用這個例子,可以張貼。 –