如何将列表作为变量添加到sqllite表?

时间:2016-06-22 07:05:30

标签: android sqlite

我有一个需要保存项目列表的应用程序, - 每个项目都有几个属性, 其中一些是普通的整数字符串和布尔值, 其中一些是列表,简单列表和更复杂的列表。

我将所有这些数据保存在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!

1 个答案:

答案 0 :(得分:1)

没有listarray这样的内置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"))