2011-05-26 96 views
3

javadocs表明android.database.Cursor有一個getType(int)方法。但是,當我嘗試調用此方法時,Eclipse給我一個錯誤,說沒有方法存在。是什麼賦予了?如何從光標獲取類型?

+0

確定導入是否正確完成? – Marcelo 2011-05-26 22:40:44

回答

6

您定位的Android版本是? getType()方法僅適用於v3.0及更高版本。

編輯:假設你的目標是Android 3.0以前的版本,那麼發現表中每個列的類型的可能'黑客'將查詢sqlite_master表來查找CREATE數據。

SELECT sql FROM sqlite_master 

這是非常討厭的,但如果你真的需要找到的類型,那麼你可以擴展SQLiteCursor並添加自己的getType(int columnIndex)方法。

當光標第一次訪問則表解析從sqlCREATE語句和存儲的「類型」在int[]你可以進行一次性查詢到sqlite_master表。

getType(int columnIndex)中,您只需根據columnindex返回int[]的值。

正如我所說,一點點的黑客,但它會工作。

+0

啊,哈!你是對的。我的目標是v1.5。在查看Javadoc時,我沒有通過適當的API級別(duh)進行篩選。是的,我將不得不按照您的建議來擴展遊標類,或者想出一個不同的解決方案。我最終試圖做的是使用odata4j庫動態創建odata文章。另一種解決方案是隻編碼一個表格解決方案。謝謝您的幫助! – SBerg413 2011-05-27 14:04:42

+0

@ SBerg413:很樂意提供幫助。祝你好運。 – Squonk 2011-05-27 20:53:36

3

因爲您可以在每個SQLite字段中(幾乎)存儲任何類型的數據。在sqlite_master中查找數據類型並使用pragma命令不是一種安全的方法。你可以使用這樣的查詢字段的類型:

select Field1, typeof(Field1), Field2, typeof(Field2) from MyTable 

此語句返回這兩個可能/可能不會從更改記錄的字段的值和它們的類型。

+0

其目的是爲了創建一個oData xml結構來發布到服務器,以獲得預期的值。所以,不幸的是,你的解決方案是有問題的。以前的答案都是更好的解決方案。 – SBerg413 2011-08-28 11:13:17

+1

在我使用Android平臺(aSQLiteManager)上的SQLite數據庫方面,我已經學會了不靠期望的艱難方式;-) – Andsen 2011-09-05 18:25:22