2013-05-17 105 views
38

如何在SQLite數據庫中存儲JSON對象?什麼是正確的方法?如何在SQLite數據庫中存儲JSON對象

一個地方是blob類型列。如果我能在JSON對象轉換成字節數組,並使用FileOutputStream中

另一個想法是在文本列來存儲作爲一個字符串

import org.json.JSONObject; 

JSONObject jsonObject; 

public void createJSONObject(Fields fields) { 
    jsonObject = new JSONObject(); 

    try { 
     jsonObject.put("storedValue1", fields.storedValue1); 
     jsonObject.put("storedValue2", fields.storedValue2); 
     jsonObject.put("storedValue3", fields.storedValue3); 
     jsonObject.put("storedValue4", fields.storedValue4); 
     jsonObject.put("storedValue5", fields.storedValue5); 
     jsonObject.put("storedValue6", fields.storedValue6); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 
+3

[JSON是*數據的文本表示](http://json.org)。因此將它保存在TEXT列/類型關聯中。將它編碼爲BLOB只會使更多的工作/痛苦 - 不要這樣做!當然,*從'JSONObject'(它不是* JSON)獲取實際的JSON *。這可以通過['jsonObject.toString()'](http://www.json.org/javadoc/org/json/JSONObject.html#toString())完成。 – user2246674

+0

如果Sqlite不是強制使用,那麼我的建議是,寫File.txt文件並將整個響應保存在文件中,並在需要時讀取它 –

回答

56

將JSONObject轉換爲字符串並另存爲TEXT/VARCHAR。雖然檢索相同的列將字符串轉換爲JSONObject。

例如

寫入DB

String stringToBeInserted = jsonObject.toString(); 
//and insert this string into DB 

從DB

String json = Read_column_value_logic_here 
JSONObject jsonObject = new JSONObject(json); 
+0

您是否因爲插入它而意識到任何性能問題? – JohnAndrews

+0

@JohnAndrews no。如果你發現,請在這裏更新:) –

+0

會做。我正在使用該方法來存儲base64轉換的圖像字符串...所以會看到會發生什麼 – JohnAndrews

2

沒有爲沒有數據類型..你需要存儲它僅作爲VARCHAR或TEXT .. jsonObject.toString();

-7

閱讀10

首先生成從JSON http://www.jsonschema2pojo.org/

主要方法

空隙CREATEDB(字符串DBNAME,字符串表名,列表數據列表,現場[]字段){ ...

普通Java對象

字段名稱將動態創建

18

另一種方法是對SQLite使用新的JSON擴展。我只是剛剛遇到這個自己:https://www.sqlite.org/json1.html這將允許您執行一定級別的查詢存儲的JSON。如果您使用VARCHAR或TEXT來存儲JSON字符串,您將無法查詢它。這是顯示它的使用(在python)一個偉大的文章http://charlesleifer.com/blog/using-the-sqlite-json1-and-fts5-extensions-with-python/

+0

這太棒了! – aalaap

+0

這裏是一個可能的方式做到這一點使用NDK的Android:https://www.sqlite.org/android/doc/trunk/www/index.wiki –

0

這是一個非常古老的問題,但https://github.com/requery/sqlite-android甚至可以讓你查詢JSON字段(和數組在其中,我已經嘗試過了,使用它我)。在此之前,我只是將JSON字符串存儲到TEXT列中。支持FTS3,FTS4,& JSON1

相關問題