【问题标题】:How to store a list of objects in sqflite?如何在 sqflite 中存储对象列表?
【发布时间】:2020-11-28 18:02:19
【问题描述】:

我想使用sqflite package 来存储我的对象。我读过一些关于它的articlestutorialsexamples。到目前为止,我明白了一切。但它们都没有涵盖我的用例:

我有一个名为Foo 的类。除了一些原始字段之外,该类还包含Bar 类的对象。 Bar 只有原始字段。另外Foo 有一个Baz 类型的对象列表。 Baz 也只有原始字段。

class Foo {
  // simple fields

  String id;

  Bar bar;
  List<Baz> bazs;
}

class Bar {
  // only primitive fields
  
  String id;
}

class Baz {
  // only primitive fields

  String id;
}

我想将bar 对象与数据库中的foo 对象连接起来,并与bazs 对象连接起来。我该怎么做?最好的方法是什么?

我对 SQL 并不十分熟悉。我知道 SELECT、WHERE、ORDERBY 等是什么意思,但我的知识并没有深入。

我在 Stack Overflow 中找到了this qustion,但我想知道将所有值存储为 JSON 是否真的有效。如果 JSON 变得非常大,会发生什么?

目前我唯一的想法是将bar 对象的id 作为字段存储在foo 对象中,反之亦然。 foo 还可以保存ids 的bazs 对象的列表。或者每个baz 对象都持有foo 对象的id。这是一个好的解决方案吗?

有没有可能让sqflite处理对象之间的关系?

【问题讨论】:

    标签: sqlite flutter dart persistence sqflite


    【解决方案1】:

    您需要创建 3 个表:

    1. Foos: [字段]:
    • id
    1. 酒吧: [字段]:
    • foo_id:指向Fooid字段的外键
    • bar_id: 这是酒吧的id
    1. 巴兹: [字段]:
    • foo_id:指向Fooid字段的外键
    • baz_id: 这是baz的id

    现在假设您要获取 Foo 记录,其中 Id = 3 以及 barbazs

    1. 获取 foo 记录:
    SELECT * FROM foo WHERE id = 3;
    
    1. 获取foo_id = 3所在的栏
    SELECT bar_id
    FROM bars
    INNER JOIN Foo on B.id = bars.foo_id;
    
    1. 获取 bazs where foo_id = 3
    SELECT baz_id
    FROM bazs
    INNER JOIN Foo on B.id = bazs.foo_id;
    

    如果你使用moor包来实现一个sqllite DB会更容易

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 2020-09-30
      • 2021-08-27
      • 2012-01-05
      • 1970-01-01
      相关资源
      最近更新 更多