You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何创建模型并将数组非JSON格式存入SQLite

适配SQLite存储数组属性的实现方案

参考JSON示例结构:
sample json data

1. 数据表设计(一对多关联)

关系型数据库本身不支持数组类型原生存储,采用主表+关联子表的结构拆分数据即可实现需求:

  • 主表存储业务对象的单值属性,设置唯一主键
  • 子表专门存储数组内的单个元素,新增外键字段关联主表主键,确保数据对应关系

2. 数据模型适配逻辑

模型层做拆分和拼装的适配,对外暴露完整的数组属性,内部处理和数据库的交互逻辑:

  • 存储时:先插入主表数据拿到主键,再将数组内的所有元素批量插入到子表,关联主表主键
  • 查询时:先查主表基础数据,再通过主键关联查询子表的所有对应元素,拼装成数组后赋值给模型对应属性

3. 核心代码示例(基于sqflite包)

建表语句

// 初始化数据库时执行建表逻辑
Future<void> _onCreate(Database db, int version) async {
  // 主表示例:存储用户基础信息
  await db.execute('''
    CREATE TABLE users (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      username TEXT NOT NULL,
      phone TEXT
    )
  ''');
  // 子表示例:存储用户的爱好数组元素
  await db.execute('''
    CREATE TABLE user_hobbies (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      user_id INTEGER NOT NULL,
      hobby_content TEXT NOT NULL,
      FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
    )
  ''');
}

存储逻辑

Future<int> saveUser(UserModel user) async {
  final db = await database;
  // 插入主表数据,获取生成的主键id
  int userId = await db.insert('users', user.toBaseMap());
  // 批量插入数组元素到子表
  List<Map<String, dynamic>> hobbyMaps = user.hobbies.map((hobby) {
    return {
      'user_id': userId,
      'hobby_content': hobby,
    };
  }).toList();
  for (var map in hobbyMaps) {
    await db.insert('user_hobbies', map);
  }
  return userId;
}

查询逻辑

Future<UserModel?> getUserById(int userId) async {
  final db = await database;
  // 查询主表基础数据
  List<Map<String, dynamic>> userRes = await db.query(
    'users',
    where: 'id = ?',
    whereArgs: [userId],
  );
  if (userRes.isEmpty) return null;
  // 查询关联的数组元素
  List<Map<String, dynamic>> hobbyRes = await db.query(
    'user_hobbies',
    where: 'user_id = ?',
    whereArgs: [userId],
  );
  List<String> hobbies = hobbyRes.map((e) => e['hobby_content'] as String).toList();
  // 拼装完整模型
  return UserModel.fromMap(userRes.first, hobbies);
}

拓展说明

如果数组内存储的是自定义对象而非基础类型,只需要在子表新增对应自定义对象的属性字段即可,整体逻辑无需调整。

内容的提问来源于stack exchange,提问作者shan michael smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:48:00