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

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

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

Utopia Database 是一个轻量且快速的Dart数据库库。它旨在简单易用,并且目前仅支持MariaDB数据库。不过,您可以贡献代码以添加对其他数据库的支持。

安装与配置

要使用 Utopia Database,除了这个包之外,还需要添加一个数据库适配器包到您的项目中。可以查看 MariaDB适配器包

import 'package:utopia_database/utopia_database.dart';
import 'package:utopia_database_adapter_mariadb/utopia_database_adapter_mariadb.dart';

void main() async {
  // 初始化MariaDB连接
  final mariadb = await MariaDB.init(
      host: 'localhost', 
      port: 3306, 
      user: 'user', 
      password: 'password'
  );
  
  // 创建数据库实例
  final database = Database(mariadb);
  print('connection initialized');

  // 设置默认数据库和命名空间
  database.setDefaultDatabase('applications');
  database.setNamespace('_console');
  print('namespace set');

  // 检查metadata集合是否存在
  final exists = await database.exists(collection: Database.metadata);

  if (!exists) {
    await database.create();
    print('metadata created');
  }

  // 检查用户集合是否存在
  final userExists = await database.exists(collection: 'users');

  if (!userExists) {
    // 创建用户集合
    await database.createCollection('users', [
      Attribute(
        id: 'name',
        type: Database.varString,
        isRequired: true,
        size: 255,
      ),
      Attribute(
        id: 'email',
        type: Database.varString,
        isRequired: true,
        size: 255,
      ),
      Attribute(
        id: 'description',
        type: Database.varString,
        isRequired: true,
        size: 2550,
      ),
    ], []);
    print('collection created');
  }

  // 查询用户集合
  final result = await database.find('users', [
    Query.or([
      Query.greaterThan('age', 25),
      Query.between('name', 'a', 'i'),
    ]),
    Query.select(['name', 'age', '\$id', '\$createdAt', '\$updatedAt']),
  ]);
  print(result);
}

示例代码

以下是完整的示例代码:

import 'dart:io';

import 'package:utopia_database/utopia_database.dart';
import 'package:utopia_database_adapter_mariadb/utopia_database_adapter_mariadb.dart';

void main() async {
  final mariadb = await MariaDB.init(
      host: 'localhost', 
      port: 3306, 
      user: 'user', 
      password: 'password'
  );

  final database = Database(mariadb);
  print('connection initialized');
  database.setDefaultDatabase('applications');
  database.setNamespace('_console');
  print('namespace set');

  final exists = await database.exists(collection: Database.metadata);

  if (!exists) {
    await database.create();
    print('metadata created');
  }

  final userExists = await database.exists(collection: 'users');

  if (!userExists) {
    await database.createCollection('users', [
      Attribute(
        id: 'name',
        type: Database.varString,
        isRequired: true,
        size: 255,
      ),
      Attribute(
        id: 'email',
        type: Database.varString,
        isRequired: true,
        size: 255,
      ),
      Attribute(
        id: 'description',
        type: Database.varString,
        isRequired: true,
        size: 2550,
      ),
    ], []);
    print('collection created');
  }

  // 创建文档(可选)
  // final doc = await database.updateDocument(
  //     'users',
  //     '329355fd-6302-4d7f-bd4c-38b73e577f1b',
  //     Document({
  //       '\$id': '329355fd-6302-4d7f-bd4c-38b73e577f1b',
  //       'age': 25,
  //       'publishedDate': DateTime.now(),
  //     }));
  // print('document created');

  // 查询数据
  final result = await database.find('users', [
    Query.or([
      Query.greaterThan('age', 25),
      Query.between('name', 'a', 'i'),
    ]),
    Query.select(['name', 'age', '\$id', '\$createdAt', '\$updatedAt']),
  ]);
  print(result);
  exit(0);
}

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

1 回复

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


当然,下面是一个关于如何使用Flutter中的utopia_database插件来管理数据库的示例代码。这个示例将展示如何初始化数据库、创建表、插入数据、查询数据以及更新数据。

首先,确保你已经在pubspec.yaml文件中添加了utopia_database依赖:

dependencies:
  flutter:
    sdk: flutter
  utopia_database: ^最新版本号

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

接下来是示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Utopia Database Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: DatabaseDemo(),
    );
  }
}

class DatabaseDemo extends StatefulWidget {
  @override
  _DatabaseDemoState createState() => _DatabaseDemoState();
}

class _DatabaseDemoState extends State<DatabaseDemo> {
  UtopiaDatabase? _db;

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

  Future<void> _initDatabase() async {
    // Initialize the database
    _db = await UtopiaDatabase.openDatabase(
      version: 1,
      onConfigure: (db) async {
        // Create a table
        await db.createTable(
          'users',
          columns: [
            ColumnDef('id', ColumnType.integer, isPrimaryKey: true, autoIncrement: true),
            ColumnDef('name', ColumnType.text, isNotNull: true),
            ColumnDef('age', ColumnType.integer),
          ],
        );
      },
    );
  }

  Future<void> _insertData() async {
    if (_db != null) {
      await _db!.insert(
        'users',
        {
          'name': 'Alice',
          'age': 30,
        },
      );
      await _db!.insert(
        'users',
        {
          'name': 'Bob',
          'age': 25,
        },
      );
    }
  }

  Future<List<Map<String, dynamic>>> _queryData() async {
    if (_db != null) {
      return await _db!.query('users');
    } else {
      return [];
    }
  }

  Future<void> _updateData() async {
    if (_db != null) {
      await _db!.update(
        'users',
        {
          'age': 26,
        },
        where: 'name = ?',
        whereArgs: ['Bob'],
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Utopia Database Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            ElevatedButton(
              onPressed: () async {
                await _insertData();
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Data inserted')));
              },
              child: Text('Insert Data'),
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: () async {
                List<Map<String, dynamic>> users = await _queryData();
                setState(() {
                  // Here you can update your UI to display the queried data
                  print('Users: $users');
                });
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Data queried')));
              },
              child: Text('Query Data'),
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: () async {
                await _updateData();
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Data updated')));
              },
              child: Text('Update Data'),
            ),
          ],
        ),
      ),
    );
  }
}

代码说明:

  1. 依赖管理:在pubspec.yaml中添加utopia_database依赖。
  2. 初始化数据库:在_initDatabase方法中,使用UtopiaDatabase.openDatabase方法初始化数据库,并在onConfigure回调中创建表。
  3. 插入数据_insertData方法用于向users表中插入数据。
  4. 查询数据_queryData方法用于从users表中查询数据,并返回结果。
  5. 更新数据_updateData方法用于更新users表中的数据。
  6. UI交互:在UI中使用按钮触发数据库操作,并通过ScaffoldMessenger.of(context).showSnackBar显示操作结果。

这个示例展示了如何使用utopia_database插件进行基本的数据库操作。你可以根据实际需求扩展和修改这个示例。

回到顶部