Flutter 将数据插入数据库 sqflite

Posted

技术标签:

【中文标题】Flutter 将数据插入数据库 sqflite【英文标题】:Flutter Insert data into the database sqflite 【发布时间】:2021-07-09 11:29:30 【问题描述】:

我需要一次一个 insert data 并将其添加到 string 的末尾,但是我正在做的事情是覆盖 data

 for (var i = 0; i< isChecked.length; i++) 
  receipt.ingredientsReceipt = isChecked[i]; //receipt is table name, ingredientsReceipt is column name
  print(isChecked[i]);// isChecked is my list containing [ING 1, ING 2, ING 3]
 

输出:

I/flutter ( 5360): ING 1
I/flutter ( 5360): ING 2
I/flutter ( 5360): ING 3

这是我的SQL

CREATE TABLE receipt(id INTEGER PRIMARY KEY AUTOINCREMENT, nameReceipt TEXT, descReceipt TEXT, ingredientsReceipt TEXT)

输出SQL:

id: null, nameReceipt: TEST, descReceipt: TEST, ingredientsReceipt: ING 3

我需要它是这样的:

id: 1, nameReceipt: TEST, descReceipt: TEST, ingredientsReceipt: ING 1, ING 2, ING 3

【问题讨论】:

您应该使用 3 个表重新设计数据库架构:receiptsingredientsreceipt_ingredient。最后一个会将收据链接到几种成分(2 列:receipt_fk 和成分_fk),因此对于 1 个收据,您将拥有成分的所有 ID。这比连接列表要好。 你能给我举个例子吗? 【参考方案1】:

根据我的评论,使用 3 个表格:

收据

id nameReceipt descReceipt
1 name1 desc1
2 name2 desc2

成分

id name
1 ingr1
2 ingr2
3 ingr3
4 ingr4

RECEIPT_INGREDIENT

id receipt_fk ingredient_fk
1 1 1
2 1 2
3 1 3
4 2 3
5 2 4

因此,当您想获得收据时,您必须编写查询以从收据中选择数据,加入receipt_ingredient(其中receipt.id =receipt_ingredient.receipt_fk),加入成分(其中receipt_ingredient.ingredeint_fk = 成分.id)。

Ex. 获取收据 id = 1 =>

id nameReceipt descReceipt receipt_fk ingredient_fk name
1 name1 desc1 1 1 ingr1
1 name1 desc1 1 2 ingr2
1 name1 desc1 1 3 ingr3

【讨论】:

以上是关于Flutter 将数据插入数据库 sqflite的主要内容,如果未能解决你的问题,请参考以下文章

如何在SQFlite中插入POJO对象和列表

如何在 Flutter 中使用 sqflite 插入特殊字符?

在 Flutter 中使用 SQFlite 将本地存储的 DB 导出为可读文件

Flutter:如何使用SQFlite存储的数据?

Flutter 应用中提供程序与 sqflite 的集成

如何在flutter中将图像数据保存到sqflite数据库以进行持久化