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

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

dart_hydrologis_db 是一个基于 Moor 的简单封装,用于简化 SQLite 数据库的管理。它被用于项目如 flutter_geopackageSMASH 数字现场测绘应用

安装插件

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

dependencies:
  dart_hydrologis_db: ^x.x.x

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

创建数据库

创建一个数据库实例并定义表结构。以下是一个简单的示例:

import 'package:dart_hydrologis_db/dart_hydrologis_db.dart';

class AppDatabase extends Database {
  static final AppDatabase _instance = AppDatabase._internal();

  factory AppDatabase() => _instance;

  AppDatabase._internal();

  [@override](/user/override)
  Future<void> init() async {
    await super.init();
    // 创建表
    await exec(
      '''
      CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER NOT NULL
      )
      ''',
    );
  }

  Future<int> insertUser(String name, int age) async {
    return await execInsert(
      'INSERT INTO users (name, age) VALUES (?, ?)',
      [name, age],
    );
  }

  Future<List<Map<String, dynamic>>> getUsers() async {
    return await query('SELECT * FROM users');
  }
}

使用数据库

在应用中使用上面创建的数据库实例进行插入和查询操作:

void main() async {
  // 初始化数据库
  await AppDatabase().init();

  // 插入数据
  await AppDatabase().insertUser('Alice', 30);
  await AppDatabase().insertUser('Bob', 25);

  // 查询数据
  var users = await AppDatabase().getUsers();
  print(users); // 输出查询结果
}

运行示例

确保在 Flutter 应用中正确初始化数据库,并执行插入和查询操作。以下是完整的示例代码:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化数据库
  await AppDatabase().init();

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('dart_hydrologis_db 示例')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 插入数据
              await AppDatabase().insertUser('Alice', 30);
              await AppDatabase().insertUser('Bob', 25);

              // 查询数据
              var users = await AppDatabase().getUsers();
              print(users); // 输出查询结果
            },
            child: Text('执行数据库操作'),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


dart_hydrologis_db 是一个用于在 Flutter 应用中管理数据库的插件。它提供了一种简单的方式来处理 SQLite 数据库,并且支持多种数据库操作,如查询、插入、更新和删除等。

以下是如何在 Flutter 项目中使用 dart_hydrologis_db 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 dart_hydrologis_db 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  dart_hydrologis_db: ^0.1.0  # 请使用最新版本

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

2. 初始化数据库

在你的 Flutter 应用中,首先需要初始化数据库。你可以创建一个数据库帮助类来管理数据库的创建和操作。

import 'package:dart_hydrologis_db/dart_hydrologis_db.dart';

class DatabaseHelper {
  static const String _dbName = 'my_database.db';
  static const int _dbVersion = 1;

  static Database? _database;

  Future<Database> get database async {
    if (_database != null) return _database!;
    _database = await _initDatabase();
    return _database!;
  }

  Future<Database> _initDatabase() async {
    final dbPath = await getDatabasesPath();
    final path = join(dbPath, _dbName);
    return await openDatabase(
      path,
      version: _dbVersion,
      onCreate: _onCreate,
    );
  }

  Future<void> _onCreate(Database db, int version) async {
    await db.execute('''
      CREATE TABLE users(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT,
        age INTEGER
      )
    ''');
  }
}

3. 操作数据库

你可以使用 DatabaseHelper 类来执行各种数据库操作。以下是一些常见的操作示例:

插入数据

Future<void> insertUser(User user) async {
  final db = await DatabaseHelper().database;
  await db.insert(
    'users',
    user.toMap(),
    conflictAlgorithm: ConflictAlgorithm.replace,
  );
}

查询数据

Future<List<User>> getUsers() async {
  final db = await DatabaseHelper().database;
  final List<Map<String, dynamic>> maps = await db.query('users');
  return List.generate(maps.length, (i) {
    return User.fromMap(maps[i]);
  });
}

更新数据

Future<void> updateUser(User user) async {
  final db = await DatabaseHelper().database;
  await db.update(
    'users',
    user.toMap(),
    where: 'id = ?',
    whereArgs: [user.id],
  );
}

删除数据

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

4. 使用模型类

为了方便地处理数据,你可以创建一个模型类 User,并在数据库操作中使用它。

class User {
  final int? id;
  final String name;
  final int age;

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

  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'name': name,
      'age': age,
    };
  }

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

5. 在 UI 中使用数据库

你可以将数据库操作与 Flutter 的 UI 组件结合使用。例如,在 ListView 中显示用户列表:

class UserList extends StatefulWidget {
  [@override](/user/override)
  _UserListState createState() => _UserListState();
}

class _UserListState extends State<UserList> {
  List<User> users = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    _loadUsers();
  }

  Future<void> _loadUsers() async {
    final userList = await getUsers();
    setState(() {
      users = userList;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: users.length,
      itemBuilder: (context, index) {
        final user = users[index];
        return ListTile(
          title: Text(user.name),
          subtitle: Text('Age: ${user.age}'),
        );
      },
    );
  }
}
回到顶部