Flutter文档数据库管理插件docdb的使用

Flutter 文档数据库管理插件 DocDB 的使用

DocDB 是一个为 Flutter 设计的简单文档数据库,它将文档元数据存储在一个表中,并将键值对存储在每个数据类型的单独表中。它不是 SQLite 的 ORM。

安装

pubspec.yaml 文件中添加 DocDB 作为依赖项:

dependencies:
  docdb:

然后运行 flutter pub get 来安装该包。

使用

连接到数据库

在使用 DocDB 之前,你需要连接到数据库。可以使用 connect 方法来实现:

import 'package:docdb/docdb.dart';

final db = DocDB();
await db.connect(dbName: 'mydb.db');

connect 方法会在数据库文件不存在时创建它,并打开与数据库的连接。

存储文档

要存储文档,创建一个 Doc 对象并为其添加字段:

final doc = Doc();
doc['title'] = '我的文档';
doc['content'] = 'Lorem ipsum dolor sit amet...';
await db.insert(doc);

insert 方法将文档添加到数据库并返回文档 ID。

检索文档

要检索文档,使用 get 方法:

final docId = 1; // 要检索的文档的 ID
final doc = await db.get(docId);
print(doc['title']); // 打印文档的标题

get 方法返回具有指定 ID 的 Doc 对象。

更新文档

要更新文档,使用 get 方法检索文档,修改其字段,然后调用 update 方法:

final docId = 1; // 要更新的文档的 ID
final doc = await db.get(docId);
doc['title'] = '新标题';
await db.update(doc);

update 方法保存更改到数据库。

删除文档

要删除文档,使用 delete 方法:

final docId = 1; // 要删除的文档的 ID
await db.delete(docId);

delete 方法从数据库中移除文档及其关联的键值对。

筛选文档

可以使用 filter 方法按特定字段值筛选文档:

final docs = await db.filter('title', '我的文档');
print(docs.length); // 打印具有指定标题的文档数量

filter 方法返回符合指定条件的 Doc 对象列表。

查询文档

可以使用 query 方法根据多个过滤器和日期约束查询文档:

List<Doc> docs = await db.query(
  {'_collection': 'xyz', 'status': 'active'},
  dateField: 'created',
  olderThan: DateTime.now().subtract(const Duration(days: 3)),
);

query 方法返回符合指定条件和日期约束的 Doc 对象列表。

示例代码

以下是一个完整的示例代码,展示了如何使用 DocDB 插件进行基本操作:

import 'package:docdb/doc.dart';
import 'package:docdb/docdb.dart';

void main() async {
  // 初始化 DocDB 实例并连接到数据库
  final db = DocDB();
  await db.connect(dbName: 'example.db');

  // 插入一个文档
  final doc = Doc();
  doc['title'] = '示例文档';
  doc['content'] = '这是一个示例文档。';
  await db.insert(doc);

  // 检索文档
  Doc retrievedDoc = await db.get(doc.id);
  print('检索到的文档: ${retrievedDoc.toMap()}');

  // 更新文档
  doc['title'] = '更新后的示例文档';
  await db.update(doc);

  // 检索更新后的文档
  final updatedDoc = await db.get(doc.id);
  print('更新后的文档: ${updatedDoc.toMap()}');

  // 删除文档
  await db.delete(doc.id);

  // 检查文档是否已删除
  final deletedDoc = await db.get(doc.id);
  print('删除后的文档: ${deletedDoc?.toMap()}');
}

更多关于Flutter文档数据库管理插件docdb的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文档数据库管理插件docdb的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


docdb 是一个基于 Flutter 的文档数据库管理插件,适用于需要本地存储和管理文档数据的应用场景。它基于轻量级的 NoSQL 数据库,如 Hive 或 ObjectBox,提供了简单易用的 API 来执行 CRUD(创建、读取、更新、删除)操作。

以下是如何在 Flutter 项目中使用 docdb 插件的详细步骤:


1. 添加依赖

首先,在 pubspec.yaml 文件中添加 docdb 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  docdb: ^latest_version # 请替换为最新版本

然后运行 flutter pub get 安装依赖。


2. 初始化数据库

在使用 docdb 之前,需要初始化数据库。通常,这是在应用的 main 函数中完成的:

import 'package:docdb/docdb.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await DocDB.init(); // 初始化数据库
  runApp(MyApp());
}

3. 定义数据模型

docdb 需要一个数据模型来表示存储的文档。数据模型通常是一个 Dart 类,使用 [@DocDBModel](/user/DocDBModel) 注解标记。

import 'package:docdb/docdb.dart';

[@DocDBModel](/user/DocDBModel)()
class User {
  String? id;
  String name;
  int age;

  User({this.id, required this.name, required this.age});

  // 以下方法用于序列化和反序列化
  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'name': name,
      'age': age,
    };
  }

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      id: json['id'],
      name: json['name'],
      age: json['age'],
    );
  }
}

4. 执行 CRUD 操作

docdb 提供了简单的方法来执行数据库操作。

创建数据

final user = User(name: 'John Doe', age: 25);
final id = await DocDB.insert(UserModel, user.toJson());

读取数据

final userData = await DocDB.find<User>(UserModel, id);
if (userData != null) {
  final user = User.fromJson(userData);
  print('User: ${user.name}, Age: ${user.age}');
}

更新数据

final updatedUser = User(name: 'John Smith', age: 26);
await DocDB.update(UserModel, id, updatedUser.toJson());

删除数据

await DocDB.delete(UserModel, id);

查询所有数据

final allUsers = await DocDB.findAll<User>(UserModel);
allUsers.forEach((user) {
  print('User: ${user.name}, Age: ${user.age}');
});

5. 配置和高级功能

docdb 提供了一些可选的配置和高级功能:

  • 数据库路径:可以指定数据库存储的路径。

    await DocDB.init(dbPath: '/path/to/database');
    
  • 加密:支持对数据库进行加密。

    await DocDB.init(encryptionKey: 'your-encryption-key');
    
  • 索引:可以为某些字段创建索引以提高查询性能。

    [@DocDBModel](/user/DocDBModel)(indexes: ['name'])
    class User {
      // ...
    }
    

6. 关闭数据库

在应用退出时,建议关闭数据库以释放资源:

await DocDB.close();
回到顶部