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

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

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

简介

Database Universe 是一个帮助你在任何地方保存数据的库,具有高性能、易于使用的特点,并且准备好支持扩展业务。

功能

  • ✅ 📱️ 跨平台支持(设备、Web)
  • ✅ 📜️ 标准化代码风格
  • ✅ ⌨️ CLI工具(终端工具帮助你使用此库或创建项目)
  • ✅ 🔥️ API支持(如果你开发机器人/用户机器人,可以直接添加库并使用)
  • ❌ 🧩️ 自定义扩展(如果需要加速开发,可以添加扩展)
  • ❌ ✨️ 友好的信息展示(适合新手)

安装库

在你的Flutter项目中安装database_universe插件:

dart pub add database_universe

快速入门示例

以下是一个简单的示例脚本,帮助你快速上手使用该库:

示例代码

// ignore_for_file: non_constant_identifier_names
import 'dart:io';
import 'package:database_universe/database_universe.dart';
import 'package:general_lib/general_lib.dart';
import 'package:path/path.dart' as path;

void main(List<String> args) async {
  print("start");

  /// 添加数据库
  DatabaseUniverse databaseUniverse = DatabaseUniverse(
    // 更改扩展名为你自己的
    extension_name: "dbu",
    // 如果设置为true,在打开数据库时密码错误会强制打开但数据库将为空
    is_ignore_on_error: true,
  );

  // 初始化数据库
  databaseUniverse.init(crypto: Crypto(key: "od8wkk8nYbgv2na8ApaL0NMGq3rcpnF5"));

  // 设置数据库目录
  Directory directory_db = () {
    if (Dart.isWeb) {
      return Directory("");
    }
    return Directory(path.join(Directory.current.path, "db"));
  }();

  print("open");

  // 打开磁盘数据库
  DatabaseUniverseData<JsonScheme> databaseUniverseData = databaseUniverse.disk_open(
    file_name: "Slebew", 
    directory: directory_db, 
    valueData: JsonScheme({})
  );

  // 修改值
  print("update");
  databaseUniverseData.value["first_name"] = "change name";

  // 检查键计数是否为整数,如果不是则设置为0
  if (databaseUniverseData.value["count"] is int == false) {
    databaseUniverseData.value["count"] = 0;
  }

  // 自增
  databaseUniverseData.value["count"] += 1;

  // 保存到磁盘
  databaseUniverse.disk_save(databaseUniverseData: databaseUniverseData, isWithClose: true);
  print("saved");
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用database_universe插件进行数据库管理的代码案例。请注意,由于database_universe可能不是一个真实存在的Flutter插件(因为我无法验证其存在性),我将基于一个通用的SQLite数据库管理插件(如sqlite_flutter)的概念来提供一个类似的实现示例。你可以根据实际的database_universe插件文档进行调整。

首先,确保你已经在pubspec.yaml文件中添加了所需的数据库插件依赖:

dependencies:
  flutter:
    sdk: flutter
  sqlite_flutter: ^0.5.0  # 假设database_universe的替代插件是sqlite_flutter

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

接下来,我们创建一个简单的Flutter应用,用于演示如何使用SQLite数据库插件进行数据库管理。

Step 1: 创建数据库帮助类

创建一个名为database_helper.dart的文件,用于管理数据库操作。

import 'package:flutter/material.dart';
import 'package:sqlite_flutter/sqlite_flutter.dart';
import 'dart:async';

class DatabaseHelper {
  static Database? _db;

  static final DatabaseHelper _instance = DatabaseHelper._init();

  factory DatabaseHelper() {
    return _instance;
  }

  DatabaseHelper._init();

  Future<Database> get db async {
    if (_db != null) {
      return _db!;
    }
    _db = await initDB();
    return _db!;
  }

  Future<Database> initDB() async {
    var databasesPath = await getDatabasesPath();
    String path = join(databasesPath, 'demo.db');

    var db = await openDatabase(path, version: 1, onCreate: (Database db, int version) async {
      await db.execute(
        'CREATE TABLE User('
        'id INTEGER PRIMARY KEY,'
        'name TEXT,'
        'age INTEGER'
        ')'
      );
    });

    return db;
  }

  Future<void> insertUser(String name, int age) async {
    var db = await db;
    await db.insert(
      'User',
      {'name': name, 'age': age},
      conflictAlgorithm: ConflictAlgorithm.replace
    );
  }

  Future<List<Map<String, dynamic>>> getUser() async {
    var db = await db;
    var result = await db.query('User');
    return result.rows.map((row) => row.data).toList();
  }

  Future<void> updateUser(int id, String name, int age) async {
    var db = await db;
    await db.update(
      'User',
      {'name': name, 'age': age},
      where: 'id = ?',
      whereArgs: [id]
    );
  }

  Future<void> deleteUser(int id) async {
    var db = await db;
    await db.delete(
      'User',
      where: 'id = ?',
      whereArgs: [id]
    );
  }
}

Step 2: 使用数据库帮助类

在你的主应用文件中(如main.dart),你可以使用上面创建的DatabaseHelper类来执行数据库操作。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter SQLite Demo'),
        ),
        body: HomeScreen(),
      ),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final DatabaseHelper dbHelper = DatabaseHelper();
  List<Map<String, dynamic>> users = [];

  @override
  void initState() {
    super.initState();
    getUsers();
  }

  Future<void> getUsers() async {
    var usersResult = await dbHelper.getUser();
    setState(() {
      users = usersResult;
    });
  }

  Future<void> insertUser() async {
    await dbHelper.insertUser('Alice', 30);
    getUsers();
  }

  Future<void> updateUser(int id) async {
    await dbHelper.updateUser(id, 'Bob', 35);
    getUsers();
  }

  Future<void> deleteUser(int id) async {
    await dbHelper.deleteUser(id);
    getUsers();
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Column(
        children: [
          ElevatedButton(
            onPressed: insertUser,
            child: Text('Insert User'),
          ),
          ElevatedButton(
            onPressed: () {
              if (users.isNotEmpty) {
                updateUser(users.first['id']!);
              }
            },
            child: Text('Update First User'),
          ),
          ElevatedButton(
            onPressed: () {
              if (users.isNotEmpty) {
                deleteUser(users.first['id']!);
              }
            },
            child: Text('Delete First User'),
          ),
          Expanded(
            child: ListView.builder(
              itemCount: users.length,
              itemBuilder: (context, index) {
                return Card(
                  child: ListTile(
                    title: Text('${users[index]['name']}'),
                    subtitle: Text('Age: ${users[index]['age']}'),
                  ),
                );
              },
            ),
          ),
        ],
      ),
    );
  }
}

这个示例展示了如何使用SQLite插件在Flutter中创建、插入、更新和删除数据。如果你使用的是database_universe插件,请查阅其官方文档,并根据其API进行相应的调整。通常,插件的使用方式大同小异,主要区别在于API的命名和细节。

回到顶部