如何使用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
相关产品推荐
相关产品推荐

