Flutter数据库管理插件drift_hrana的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter数据库管理插件drift_hrana的使用

简介

drift_hrana 包封装了 package:hrana,使得可以使用 drift 这个 Dart 和 Flutter 应用程序的数据库库来访问远程的 libsql 或 Turso 数据库。

要使用这个包,你需要在某处运行一个 sqld 服务器。例如,你可以使用 Docker 来启动一个:

docker run -p 8080:8080 -ti -e SQLD_NODE=primary ghcr.io/tursodatabase/libsql-server:latest

然后,你可以使用来自 package:drift_hrana/drift_hrana.dartHranaDatabase 类连接到这样的服务器:

使用示例

定义数据表

首先定义你的数据表结构。这里我们以一个简单的笔记应用为例,创建了一个名为 Notes 的表。

import 'package:drift/drift.dart';

part 'main.g.dart';

class Notes extends Table {
  IntColumn get id => integer().autoIncrement()();
  TextColumn get content => text()();
}

创建数据库类

接下来,我们需要创建一个继承自 _$_AppDatabase 的数据库类,并指定所使用的数据表和模式版本。

@DriftDatabase(tables: [Notes])
class AppDatabase extends _$AppDatabase {
  // 构造函数,传入 HranaDatabase 实例
  AppDatabase(super.e);

  // 提供一个静态方法来简化远程数据库的实例化
  AppDatabase.remote()
      : super(HranaDatabase(
          Uri.parse('ws://localhost:8080/'),
          jwtToken: null,
        ));

  @override
  int get schemaVersion => 1;
}

在应用程序中使用数据库

最后,在应用程序的入口点初始化数据库并进行操作。以下是完整的 main 函数示例,展示了如何插入一条记录到 Notes 表中。

void main() async {
  // 初始化数据库,连接到本地运行的 sqld 服务器
  final database = AppDatabase.remote();

  // 插入新笔记,并返回插入后的完整对象
  final note = await database.into(database.notes).insertReturning(
      NotesCompanion.insert(content: 'hello from the other side?'));

  // 打印插入的结果
  print('inserted note: $note');
}

注意事项

  • 在实际项目中,确保正确处理异常和错误。
  • 根据需要调整 jwtToken 参数以进行身份验证。
  • 对于生产环境,请不要暴露敏感信息(如令牌)在代码或配置文件中,考虑使用环境变量或其他安全方式传递这些信息。

通过以上步骤,你就可以开始在 Flutter 项目中使用 drift_hrana 插件与远程数据库交互了。希望这能帮助你在项目中实现更强大的数据存储功能!


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

1 回复

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


在Flutter中,drift_hrana 并不是一个广泛认知或官方维护的数据库管理插件。然而,基于你提到的插件名称,我猜测你可能是指 drift(也称为 moor 在 Dart 生态系统中)的某种特定配置或版本,或者是一个具有类似功能的自定义插件。在Flutter开发中,drift(一个基于 SQL 的 Dart ORM 库)是一个流行的数据库管理解决方案。

以下是一个使用 drift(而不是 drift_hrana,因为后者不是官方或广泛认知的插件)在 Flutter 中管理 SQLite 数据库的示例代码。

首先,确保你的 pubspec.yaml 文件中包含了 drift 依赖:

dependencies:
  flutter:
    sdk: flutter
  drift: ^x.y.z  # 替换为最新版本号

然后,运行 flutter pub get 来获取依赖。

接下来,定义你的数据库和表结构。例如,我们创建一个简单的 User 表:

import 'package:drift/drift.dart';

part 'database.g.dart';

@DriftDatabase(
  tables: [Users],
  schemas: [
    SchemaVersion(1),
  ],
)
abstract class AppDatabase extends _$AppDatabase {
  AppDatabase() : super(_openConnection());

  // 一个简单的用户表
  @override
  late final users = UsersDao()
      ..$tableName = 'users';
}

@DriftTable()
class Users with TableInfo<Users, int> {
  IntColumn get id => integer().primaryKey().autoIncrement()();
  TextColumn get name => text().named('name')();
  TextColumn get email => text().named('email').unique()();
}

然后,生成数据库代码。在你的项目根目录下运行以下命令:

flutter pub run build_runner build

这将会生成 database.g.dart 文件,它包含了与数据库交互所需的实现代码。

接下来,在你的 Flutter 应用中使用这个数据库。例如,在 main.dart 中:

import 'package:flutter/material.dart';
import 'database.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final database = AppDatabase();
  await database.databaseConnection.open();

  // 迁移数据库(如果有需要的话)
  await database.createAllTables();

  runApp(MyApp(database: database));
}

class MyApp extends StatelessWidget {
  final AppDatabase database;

  MyApp({required this.database});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Drift Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 插入一个用户
              final user = Users(name: 'Alice', email: 'alice@example.com');
              await database.into(users).insert(user);

              // 查询所有用户
              final users = await database.users.getAll();
              print(users);
            },
            child: Text('Insert and Query Users'),
          ),
        ),
      ),
    );
  }
}

这个示例展示了如何初始化数据库、创建表、插入数据和查询数据。注意,这只是一个简单的示例,实际应用中你可能需要处理更多的错误和异常情况,以及更复杂的数据库操作。

如果你确实是在寻找一个名为 drift_hrana 的特定插件,并且它与 drift 有所不同,请确保你查找的是正确的插件名称,并查阅其官方文档以获取使用指南和示例代码。由于 drift_hrana 不是官方或广泛认知的插件,我无法提供关于它的具体代码或详细指导。

回到顶部