Flutter本地数据库管理插件objectdb的使用
Flutter本地数据库管理插件objectdb的使用
如何使用 ObjectDB
final path = Directory.current.path + '/my.db';
// 创建数据库实例并打开
final db = ObjectDB(FileSystemStorage(path));
// 插入文档到数据库
db.insert({'name': {'first': 'Some', 'last': 'Body'}, 'age': 18, 'active': true});
db.insert({'name': {'first': 'Someone', 'last': 'Else'}, 'age': 25, 'active': false});
// 更新文档
db.update({Op.gte: {'age': 80}}, {'active': false});
// 删除文档
db.remove({'active': false});
// 在数据库中搜索文档
var result = await db.find({'active': true, 'name.first': 'Some'});
// 清理数据库文件
db.cleanup();
// 关闭数据库
await db.close();
存储类型
// 非持久化(通用)
import 'package:objectdb/src/objectdb_storage_in_memory.dart';
InMemoryStorage();
// 持久化在文件系统(Flutter Mobile & Desktop)
import 'package:objectdb/src/objectdb_storage_filesystem.dart';
FileSystemStorage();
// 持久化在IndexedDB(Flutter Web)
import 'package:objectdb/src/objectdb_storage_indexeddb.dart';
IndexedDBStorage(dbName);
Flutter
检查 example 项目。
方法
Future<void> db.cleanup()
清理数据库文件Future<void> db.close()
关闭数据库(应等待以确保所有查询已执行)
查找
Future<List<Map>> db.find(Map query)
匹配文档列表Future<Map> db.first(Map query)
第一个匹配的文档Future<Map> db.last(Map query)
最后一个匹配的文档
插入
Future<ObjectId> db.insert(Map document)
插入单个文档Future<List<ObjectId>> db.insertMany(List<Map> documents)
插入多个文档
更新
Future<int> db.update(Map query, Map changes, [bool replace = false])
根据query
更新文档,可选替换整个文档
删除
Future<int> db.remove(Map query)
删除匹配query
的的文档
查询
// 匹配子属字段
{Op.gte: {
'birthday.year': 18
}}
// 或运算符
{Op.or: {
'active': true,
Op.inList: {'group': ['admin', 'moderator']}
}}
// 不等于
{Op.not: {'active': false}}
运算符
-
逻辑运算符
and
(默认第一级运算符)or
not
-
比较运算符
lt
,lte
: 小于,小于等于gt
,gte
: 大于,大于等于inList
,notInList
: 在列表中,不在列表中
-
修改运算符
set
: 设置值max
,min
: 设置最大或最小整数值increment
,multiply
: 增加/乘以unset
: 取消键/值rename
: 重命名键
{Op.set: {'path.to.key': 'value'}} // 设置 entry['path']['to']['key'] = 'value' (路径将创建如果不存在)
{Op.max: {'path.to.key': 2}} // 如果值大于 200,则设置为 200
{Op.min: {'path.to.key': 2}} // 如果值小于 200 则设置为 200
{Op.increment: {'path.to.key': -5}} // 增加 5
{Op.multiply: {'path.to.key': 2}} // 乘以 2
{Op.unset: {'path.to.key': true}} // 如果存在则取消键/值 entry['path']['to']['key']
{Op.rename: {'path.to.key': 'new_key'}} // 新值将位于 entry['path']['to']['new_key']
db.update({
'age': RegExp('[18-20]'),
Op.gt: {'duration': 500},
}, {
Op.max: {'stats.score': 100},
Op.increment: {'stats.level': -5},
});
示例
// 查询
var result = db.find({
'active': true,
Op.or: {
Op.inList: {'state': ['Florida', 'Virginia', 'New Jersey']},
Op.gte: {'age': 30},
}
});
// 同样可以写成
var match = (result['active'] == true && (['Florida', 'Virginia', 'New Jersey'].contains(result['state']) || result['age'] >= 30));
更多关于Flutter本地数据库管理插件objectdb的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地数据库管理插件objectdb的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用ObjectDB进行本地数据库管理的代码案例。ObjectDB 是一个轻量级的NoSQL数据库,它允许你以对象的形式存储和检索数据,非常适合Flutter应用中的本地数据管理。
首先,你需要在你的Flutter项目中添加ObjectDB的依赖。在你的pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
objectdb: ^最新版本号 # 请替换为当前最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter应用中,你可以按照以下步骤使用ObjectDB:
-
初始化数据库:
首先,你需要初始化数据库。这通常在你的应用的主入口文件中进行,比如
main.dart
。import 'package:flutter/material.dart'; import 'package:objectdb/objectdb.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { // 初始化数据库 ObjectDB.init('my_database.odb'); return MaterialApp( title: 'Flutter ObjectDB Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(), ); } }
-
定义数据模型:
接下来,你需要定义一个数据模型,这个模型将用于存储你的数据。ObjectDB使用注解来标记类的字段。
import 'package:objectdb/objectdb.dart'; [@Entity](/user/Entity)() class User { @PrimaryKey() int id; @Column() String name; @Column() int age; User({required this.id, required this.name, required this.age}); }
-
CRUD操作:
现在,你可以在你的应用中执行CRUD(创建、读取、更新、删除)操作。
import 'package:flutter/material.dart'; import 'package:objectdb/objectdb.dart'; import 'user_model.dart'; // 假设你的数据模型文件名为user_model.dart class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { List<User> users = []; @override void initState() { super.initState(); // 示例:添加用户 User user1 = User(id: 1, name: 'Alice', age: 30); User user2 = User(id: 2, name: 'Bob', age: 25); ObjectDB.box<User>().put(user1); ObjectDB.box<User>().put(user2); // 示例:读取所有用户 loadUsers(); } void loadUsers() async { List<User> loadedUsers = await ObjectDB.box<User>().getAll(); setState(() { users = loadedUsers; }); } void updateUser(User user) async { await ObjectDB.box<User>().put(user); loadUsers(); } void deleteUser(int id) async { await ObjectDB.box<User>().delete(id); loadUsers(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('ObjectDB Demo'), ), body: Padding( padding: const EdgeInsets.all(8.0), child: Column( children: [ // 显示用户列表 Expanded( child: ListView.builder( itemCount: users.length, itemBuilder: (context, index) { User user = users[index]; return ListTile( title: Text('${user.name} (${user.age})'), subtitle: Text('ID: ${user.id}'), trailing: IconButton( icon: Icon(Icons.delete), onPressed: () { deleteUser(user.id); }, ), onTap: () { // 示例:更新用户 User updatedUser = User( id: user.id, name: user.name + ' (updated)', age: user.age + 1, ); updateUser(updatedUser); }, ); }, ), ), ], ), ), ); } }
这个代码案例展示了如何在Flutter应用中使用ObjectDB进行本地数据库管理,包括初始化数据库、定义数据模型以及执行基本的CRUD操作。你可以根据实际需求进一步扩展和修改这个示例。