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

如何使用Sembast从NoSql数据库中仅读取单个数据项?

用Sembast读取单个数据项的实现方法

1. 已知记录ID时直接读取

如果已经知道目标数据的记录ID,直接通过record()方法定位记录,再调用get()就能拿到单个数据:

import 'package:sembast/sembast.dart';
import 'package:sembast/sembast_io.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';

Future<void> readSingleItemById() async {
  // 打开数据库
  final appDir = await getApplicationDocumentsDirectory();
  final dbPath = join(appDir.path, 'my_database.db');
  final db = await databaseFactoryIo.openDatabase(dbPath);

  // 获取目标存储对象
  final store = intMapStoreFactory.store('user_store');

  // 读取ID为5的记录
  final targetId = 5;
  final singleData = await store.record(targetId).get(db);

  if (singleData != null) {
    print('读取到的数据:$singleData');
  } else {
    print('未找到ID为$targetId的记录');
  }

  await db.close();
}

2. 按条件查询单个数据

如果需要通过字段条件筛选(比如匹配某个属性值),可以用查询构建器加上limit(1)限制结果数量,再调用findFirst()直接获取第一个匹配项,比先查列表再取第一个更高效:

import 'package:sembast/sembast.dart';
import 'package:sembast/sembast_io.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';

Future<void> readSingleItemByCondition() async {
  final appDir = await getApplicationDocumentsDirectory();
  final dbPath = join(appDir.path, 'my_database.db');
  final db = await databaseFactoryIo.openDatabase(dbPath);
  final store = intMapStoreFactory.store('user_store');

  // 构建查询:筛选age字段等于25的第一条记录
  final finder = Finder(
    filter: Filter.equals('age', 25),
    limit: 1,
  );

  final singleData = await store.findFirst(db, finder: finder);

  if (singleData != null) {
    print('查询到的数据:${singleData.value}');
  } else {
    print('未找到符合条件的记录');
  }

  await db.close();
}

内容的提问来源于stack exchange,提问作者gun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:20:26