sqlite - 如何在 sqflite 中存储对象列表?

标签 sqlite flutter dart persistence sqflite

我想使用 sqflite package存储我的对象。我读了一些articles , tutorialsexamples关于它。至此我明白了一切。但它们都没有涵盖我的用例:

我有一个名为 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 等的含义,但我的知识还不够深入。

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

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

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

最佳答案

您需要创建 3 个表:

  1. 福斯: [字段]:
  • id
  1. 酒吧: [字段]:
  • foo_id:指向Foo
  • id字段的外键
  • bar_id: 酒吧的id
  1. 巴斯: [字段]:
  • foo_id:指向Foo
  • id字段的外键
  • 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,其中 foo_id = 3
SELECT baz_id
FROM bazs
INNER JOIN Foo on B.id = bazs.foo_id;

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

关于sqlite - 如何在 sqflite 中存储对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63318065/

相关文章:

java - Android:ListView 上的 Sqlite

flutter - Flutter从var中的图像获取像素颜色

dart - 如何在 flutter 中删除 GridView 项目?

firebase - Flutter:Firebase 如何更改查询和内容

达塔姆(Dartium)已过期

sql - 抑制Sqlite数据库上的重复项

android - Android NDK (Cocos2d-x) 打开数据库文件失败

sql - 在 SQLite 中计算表中行数的最有效方法是什么?

带有 CrossAxisAlignment.stretch 的 Flutter Row 抛出错误 BoxConstraints 强制无限高度

flutter - Flutter将数据传递给Statefulwidget