我有一个需要保存项目列表的应用程序, - 每个项目都有几个属性, 其中一些是普通的整数字符串和布尔值, 其中一些是列表,简单列表和更复杂的列表。
我将所有这些数据保存在sql表中。我认为,这是离线保存数据的最简单方法。
我想知道,我知道如何做简单的TEXT,INTEGER, 但是如何将List添加为变量?
澄清。 这就是我现在所做的:
mydatabase.execSQL("CREATE TABLE IF NOT EXISTS Projects(name TEXT, description TEXT, networkId TEXT);");
这就是我想要做的事情:
mydatabase.execSQL("CREATE TABLE IF NOT EXISTS Projects(name TEXT, description TEXT, list1 ArrayList<String>, list2 ArrayList<String> , costumeList1 ArrayList<CostumModel>, costumeList1 ArrayList<CostumModel2>, networkId TEXT);");
如何做到这一点? 我在网上寻找这个,并没有找到太多的帮助。 thnx!
答案 0 :(得分:1)
没有list
或array
这样的内置sqlite类型。要将集合保存到sqlite,您应该选择以下两种方法之一:创建与原始表相关的另一个表或将列表序列化为字符串(例如json字符串)并另存为文本
为 costumeList1 创建新表(来自您的样本):
CREATE TABLE costumes (
_id INTEGER PRIMARY KEY,
name TEXT,
project_id INTEGER,
FOREIGN KEY(project_id) REFERENCES Projects(_id)
);
并按项目选择服装:
SELECT name FROM costumes WHERE project_id = ?
如果您的服装可以使用其他字段(如模型或计数)进行扩展,则此方法很有用。更新新实体的现有表格很容易:
ALTER TABLE costumes ADD COLUMN model TEXT;
如果你的服装只是一个数组,你可以将它序列化为字符串(例如json string):
new JSONArray(Arrays.asList(costumeList1)).toString();
并将此字符串保存为数据库中的TEXT
字段。
要获得此数组,您应该反序列化它:
new JsonArray(cursor.getString("costumeList1"))