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

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

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

quds_dbsqflite 的自动化版本!

如何使用

1. 创建模型

模型类应该继承自 DbModel 类。定义模型的架构,支持的字段类型包括:

整数 字符串 日期时间 其他
IdField StringField DateTimeField BlobField
IntField DateTimeStringField BoolField
NumField JsonField
DoubleField ListField
ColorField
EnumField
class Note extends DbModel {
  var title = StringField(columnName: 'title'); // 字段名为 "title"
  var content = StringField(columnName: 'content'); // 字段名为 "content"
  var isImportant = BoolField(columnName: 'isImportant'); // 字段名为 "isImportant"
  var color = ColorField(columnName: 'color'); // 字段名为 "color"

  [@override](/user/override)
  List<FieldWithValue>? getFields() => [title, content, isImportant, color]; // 返回所有字段
}

注意: 每个模型都有默认字段:

  • id(自动递增整数字段)
  • creationTime(创建时自动设置)
  • modificationTime(创建时自动设置,并且每次更新操作时都会更新)

2. 创建表管理器

class NotesProvider extends DbTableProvider<Note> {
  NotesProvider() : super(() => Note()); // 提供一个模型对象的创建函数

  [@override](/user/override)
  String get tableName => 'Notes'; // 设置表名
}

注意: 在提供者类构造函数中,你需要提供一个模型对象的创建函数。

创建提供者实例:

NotesProvider notesProvider = NotesProvider();

3. 增删改查操作

创建:插入数据
单条插入
Note n = Note();
n.title.value = 'New note';
n.content.value = 'Note content, describe your self';
n.isImportant.value = ([true, false]..shuffle()).first; // 随机选择 true 或 false
n.color.value = ([Colors.red, Colors.blue, Colors.yellow, Colors.orange]..shuffle()).first; // 随机选择一种颜色

await notesProvider.insertEntry(n); // 插入一条记录
多条插入
await notesProvider.insertCollection([n1, n2, n3, ...]); // 插入多条记录
读取:查询数据
var allNotes = await notesProvider.select(); // 查询所有笔记
var importantNotes = await notesProvider.select(where: (n) => n.isImportant.isTrue); // 查询重要的笔记
var importantRed = await notesProvider.select(where: (n) => n.isImportant.isTrue & n.color.equals(Color(0xffff0000))); // 查询重要的红色笔记
更新
n.title = 'new title';
await notesProvider.updateEntry(n); // 更新一条记录
删除
await notesProvider.deleteEntry(n); // 删除一条记录

监控变更

要处理某个表中的变化:

notesProvider.addEntryChangeListner((changeType, entry) {
  switch (changeType) {
    case EntryChangeType.Insertion:
      // 新的笔记已添加 (entry)
      break;
    case EntryChangeType.Deletion:
      // 笔记已删除 (entry)
      break;
    case EntryChangeType.Modification:
      // 笔记已修改 (entry)
      break;
  }
});

数据库位置

数据存储在哪里?

默认情况下,数据将保存在应用程序的数据文件夹中的 data.db 文件内。要更改此路径:

DbHelper.mainDbPath = 'your db path';

如果要将一张表保存在其他文件中:

class NotesProvider extends DbTableProvider<Note> {
  NotesProvider()
      : super(() => Note(), specialDbFile: 'your specified file path'); // 指定特殊数据库文件路径

  [@override](/user/override)
  String get tableName => 'Notes';
}

完整示例代码

import 'package:example/data/notes_provider.dart';
import 'package:flutter/material.dart';
import 'ui/screens/home_page.dart';

void main() async {
  // var result =
  await notesProvider.query(
      queries: (n) => [
            n.jsonArrayData.asNamed('arr'),
            n.jsonArrayData
                .removeAt(1)
                .insertAt(0, 7)
                .add(10)
                .asNamed('arr_after')
          ]);
  // print(result);
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // 这个小部件是你的应用的根
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Quds Db Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Quds Db Example'),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用quds_db插件进行数据库管理的代码示例。quds_db是一个轻量级的Flutter数据库管理插件,支持SQLite数据库操作。以下代码展示了如何初始化数据库、创建表、插入数据、查询数据以及更新和删除数据的基本用法。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  quds_db: ^最新版本号  # 请替换为最新版本号

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

2. 初始化数据库

在你的主文件(例如main.dart)中,初始化数据库连接:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('QudsDB Example'),
        ),
        body: DatabaseExample(),
      ),
    );
  }
}

class DatabaseExample extends StatefulWidget {
  @override
  _DatabaseExampleState createState() => _DatabaseExampleState();
}

class _DatabaseExampleState extends State<DatabaseExample> {
  late DatabaseHelper _dbHelper;

  @override
  void initState() {
    super.initState();
    _dbHelper = DatabaseHelper();
    _dbHelper.initializeDatabase().then((_) {
      // 初始化完成后可以执行其他操作
    });
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: ElevatedButton(
        onPressed: () {
          // 示例操作,比如插入数据
          _insertData();
        },
        child: Text('Insert Data'),
      ),
    );
  }

  void _insertData() {
    _dbHelper.insertData(
      'your_table_name',
      {'column1': 'value1', 'column2': 'value2'},
    ).then((result) {
      print('Data inserted: $result');
    }).catchError((error) {
      print('Error inserting data: $error');
    });
  }
}

class DatabaseHelper {
  late Database _db;

  Future<void> initializeDatabase() async {
    var databasesPath = await getDatabasesPath();
    String path = join(databasesPath, 'example.db');

    _db = await openDatabase(path, version: 1, onCreate: (Database db, int version) async {
      await db.execute(
        'CREATE TABLE your_table_name ('
        'id INTEGER PRIMARY KEY AUTOINCREMENT,'
        'column1 TEXT NOT NULL,'
        'column2 TEXT NOT NULL'
        ')',
      );
    });
  }

  Future<int> insertData(String table, Map<String, dynamic> data) async {
    var db = await _db;
    var result = await db.insert(table, data.toMap());
    return result;
  }

  // 你可以在这里添加其他数据库操作方法,如查询、更新和删除
}

3. 查询数据

添加查询数据的方法:

Future<List<Map<String, dynamic>>> queryData(String table) async {
  var db = await _db;
  var result = await db.query(table);
  return result.rows.map((row) => row.toMap()).toList();
}

_DatabaseExampleState类中添加一个按钮来调用查询方法并显示结果:

class _DatabaseExampleState extends State<DatabaseExample> {
  late DatabaseHelper _dbHelper;
  List<Map<String, dynamic>>? _dataList;

  @override
  void initState() {
    super.initState();
    _dbHelper = DatabaseHelper();
    _dbHelper.initializeDatabase().then((_) {
      // 初始化完成后可以执行其他操作
    });
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          ElevatedButton(
            onPressed: () {
              _insertData();
            },
            child: Text('Insert Data'),
          ),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: () async {
              _dataList = await _dbHelper.queryData('your_table_name');
              setState(() {});
            },
            child: Text('Query Data'),
          ),
          SizedBox(height: 20),
          if (_dataList != null)
            ListView.builder(
              shrinkWrap: true,
              itemCount: _dataList!.length,
              itemBuilder: (context, index) {
                return ListTile(
                  title: Text('ID: ${_dataList![index]['id']}'),
                  subtitle: Text('Column1: ${_dataList![index]['column1']}'),
                  trailing: Text('Column2: ${_dataList![index]['column2']}'),
                );
              },
            ),
        ],
      ),
    );
  }

  void _insertData() {
    _dbHelper.insertData(
      'your_table_name',
      {'column1': 'value1', 'column2': 'value2'},
    ).then((result) {
      print('Data inserted: $result');
    }).catchError((error) {
      print('Error inserting data: $error');
    });
  }
}

4. 更新和删除数据

添加更新和删除数据的方法:

Future<int> updateData(String table, Map<String, dynamic> data, Map<String, dynamic> whereArgs) async {
  var db = await _db;
  var result = await db.update(table, data, whereArgs: whereArgs);
  return result;
}

Future<int> deleteData(String table, Map<String, dynamic> whereArgs) async {
  var db = await _db;
  var result = await db.delete(table, whereArgs: whereArgs);
  return result;
}

_DatabaseExampleState类中添加按钮来调用这些方法:

ElevatedButton(
  onPressed: () async {
    int result = await _dbHelper.updateData(
      'your_table_name',
      {'column1': 'new_value1'},
      {'id': 1},  // 假设你要更新ID为1的记录
    );
    print('Data updated: $result');
  },
  child: Text('Update Data'),
),
SizedBox(height: 20),
ElevatedButton(
  onPressed: () async {
    int result = await _dbHelper.deleteData(
      'your_table_name',
      {'id': 1},  // 假设你要删除ID为1的记录
    );
    print('Data deleted: $result');
    setState(() {
      _dataList = null;  // 重新查询数据
    });
  },
  child: Text('Delete Data'),
),

这样,你就完成了一个基本的Flutter应用,展示了如何使用quds_db插件进行数据库管理。你可以根据实际需求扩展这些功能。

回到顶部