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

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

使用此包作为库

在你的 pubspec.yaml 文件中添加以下依赖:

$ flutter pub add crazy_db

这将会在你的包的 pubspec.yaml 文件中添加如下行(并运行隐式的 flutter pub get):

dependencies:
  crazy_db: ^1.0.4

你也可以通过编辑器支持的 flutter pub get 功能来实现。具体操作请查阅你的编辑器文档。

导入它

现在可以在你的 Dart 代码中使用以下导入语句:

import 'package:crazy_db/crazy_db.dart';

简介

什么是CrazyDB?

CrazyDB 是一个基于 sqflite 的二次封装,使用点语法更方便地操作数据库。

入门指南

1. 在根目录下创建 assets 文件夹

2. 在 assets 文件夹中创建 .sqlite 文件,默认名称为 crazyDB.sqlite

3. 在使用之前调用一次

import 'package:crazy_db/crazy_db.dart';
await CrazyDB.connection("crazyDB.sqlite");

这将把文件复制到沙盒文件,并在调试模式下打印 .sqlite 文件的位置。默认情况下打开数据库。

使用示例

插入数据

int ret = await CrazyDB.table("request_cache")
    .create({"url": "https://baidu.com"});

删除数据

int ret = await CrazyDB.table("request_cache")
  .where(column: "url", value: "https://baidu.com")
  .delete();

更新数据

int ret = await CrazyDB.table("request_cache")
  .where(column: "url", value: "https://baidu.com")
  .update({"json": "{}"});

查询数据

List list = await CrazyDB.table("request_cache")
        .where(column: "id", value: 1)
        .where(column: "url", value: "https://baidu.com")
        .whereNotNull(column: "url")
        .orWhere(column: "id", value: 2)
        .whereNotBetween("id",[500,600])
        .orderByDesc("id")
        .whereNotIn("id", [1,3])
        .get();

使用原生SQL处理

await CrazyDB.selectRaw("select * from request_cache");
await CrazyDB.insertRaw("insert into request_cache(url) values('http://')");
await CrazyDB.updateRaw("update request_cache set url='http://' where id = 1 ");
await CrazyDB.deleteRaw("delete from request_cache where id =1");

使用事务

// 注意:你必须至少使用一次 CrazyDB.commit() 或 CrazyDB.rollback()
try {
    await CrazyDB.transaction();
    // 你的SQL请在这里编写
    // 示例:
    int id = await CrazyDB.table("request_cache").create({"url":"https://sina.cn"});
    CrazyDB.table("request_cache").where(column: "id", value: id).delete();
    // 你必须使用该函数
    await CrazyDB.commit();
} catch (e) {
    // 你必须使用该函数
    CrazyDB.rollback();
    debugPrint("transaction=>$e");
}

API 文档

方法 返回值 描述
CrazyDB.openDB() bool 打开数据库
CrazyDB.closeDB() void 关闭数据库
CrazyDB.connection(String db) CrazyDB 连接数据库
CrazyDB.transaction() void 事务闭包,使用 try catch
CrazyDB.commit() void 执行SQL并确保最后一行使用该函数
CrazyDB.rollback() void 如果抛出异常,必须使用该函数
CrazyDB.table(String db) CrazyDB 使用表名返回实例
CrazyDB.select({List? list}) CrazyDB 过滤查询字段
CrazyDB.create(Map<String, dynamic> map) int (id) 插入数据并返回ID
CrazyDB.db.join(String tab2, String tab1Column, String symbol, String tab2Column) CrazyDB 内连接
CrazyDB.db.leftJoin(String tab2, String tab1Column, String symbol, String tab2Column) CrazyDB 左连接
CrazyDB.db.rightJoin(String tab2, String tab1Column, String symbol, String tab2Column) CrazyDB 右连接
CrazyDB.db.where({required String? column, String? symbol, required value}) CrazyDB where
CrazyDB.db.whereNotNull({required String column}) CrazyDB $1000
CrazyDB.db.whereNull({required String column}) CrazyDB $1000
CrazyDB.db.orWhere({required String column, String? symbol, required value}) CrazyDB $1000
CrazyDB.db.whereBetween(String column, List list) CrazyDB $1000
CrazyDB.db.whereNotBetween(String column, List list) CrazyDB $1000
CrazyDB.db.whereIn(String column, List list) CrazyDB $1000
CrazyDB.db.whereNotIn(String column, List list) CrazyDB $1000
CrazyDB.db.update(Map<String, dynamic> map) int (count) 更新数据并返回影响的行数
CrazyDB.db.delete() int (count) 删除数据并返回影响的行数
CrazyDB.db.get() List<Map<String, Object?>> 查询数据
CrazyDB.db.first() Map<String, Object?> 查询第一条数据
CrazyDB.db.find(int id) Map<String, Object?> 查询表中 id={id} 的数据
CrazyDB.db.paginate(int page, {int? perPage}) List<Map<String, Object?>> 分页查询
CrazyDB.db.count({String? column}) int 计算列的数量
CrazyDB.db.sum({String? column, String? alias}) List<Map<String, Object?>> 求和
CrazyDB.db.avg({String? column}) int 平均值
CrazyDB.db.pluck(String column, {String? key}) dynamic 将数据转换为列表或字典
CrazyDB.db.value(String column) dynamic 获取第一条数据的指定列
CrazyDB.db.orderBy(String column, {String? soft}) CrazyDB 按升序排序
CrazyDB.db.orderByDesc(String column) CrazyDB 按降序排序
CrazyDB.db.groupBy(String column) CrazyDB 分组
CrazyDB.db.having(String sql) CrazyDB having
CrazyDB.getSql() String 打印原生SQL

完整示例

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

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
    testDb();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container();
  }

  void testDb() async {
    await CrazyDB.connection("crazyDB.sqlite");

    int id = await CrazyDB.table("request_cache")
      .create({"url": "https://baidu.com"});

    int count1 = await CrazyDB.table("request_cache")
      .where(column: "url", value: "https://baidu.com")
      .delete();

    int count2 = await CrazyDB.table("request_cache")
      .where(column: "url", value: "https://baidu.com")
      .update({"json": "{}"});

    // Many to many
    List list = await CrazyDB.table("request_cache")
      .join(
          "request_detail", "request_cache.id", "=", "request_detail.url_id")
      .join(
          "request_time", "request_detail.id", "=", "request_time.detail_id")
      .where(column: "id", value: 1)
      .where(column: "url", value: "https://baidu.com")
      .whereNotNull(column: "url")
      .orWhere(column: "id", value: 2)
      .whereNotBetween("id",[500,600])
      .orderByDesc("id")
      .whereNotIn("id", [1,3])
      .where(
          column: "request_time.create_time",
          symbol: "<",
          value: "2022-6-10 15:47")
      .get(list: [
        "request_cache.id",
        "request_cache.url",
        "request_cache.json",
        "request_detail.id as detail_id",
        "request_detail.title",
        "request_detail.content",
        "request_time.auth",
        "request_time.create_time"
      ]);

    List? list1 = await CrazyDB.table("request_cache")
      .where(column: "id", value: "1")
      .groupBy("id")
      .having("count > 2")
      .having("json = '{}'")
      .get();

    // 打印SQL
    CrazyDB.getSql();

    // 事务
    try {
      CrazyDB.transaction();
      CrazyDB.table("request_cache").create({"url": "https://sina.cn"});
      Map map = await CrazyDB.table("request_cache").select().where(column: "id", value: 1).first();
      if (map.isNotEmpty) {
        CrazyDB.table("request_cache").where(column: "id", value: 1).delete();
      }

      await CrazyDB.commit();
    } catch (e) {
      CrazyDB.rollback();
      debugPrint("transaction=>$e");
    }

    await CrazyDB.table("request_cache").create({"url": "https://baidu.cn"});

    debugPrint("list1=>$list1");
    debugPrint(list.toString());
  }
}

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

1 回复

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


crazy_db 是一个用于 Flutter 的轻量级数据库管理插件,它提供了一种简单的方式来管理本地数据库。它支持基本的 CRUD(创建、读取、更新、删除)操作,并且易于集成到 Flutter 项目中。

以下是如何使用 crazy_db 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  crazy_db: ^1.0.0  # 请使用最新版本

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

2. 初始化数据库

在使用 crazy_db 之前,你需要初始化数据库。通常,你可以在 main.dart 文件中进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // Initialize the database
  await CrazyDB.initialize('my_database.db');
  
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Crazy DB Example',
      home: HomeScreen(),
    );
  }
}

3. 创建表

你可以使用 CrazyDBcreateTable 方法来创建表:

await CrazyDB.createTable('users', {
  'id': 'INTEGER PRIMARY KEY',
  'name': 'TEXT',
  'age': 'INTEGER',
});

4. 插入数据

使用 insert 方法插入数据:

int id = await CrazyDB.insert('users', {
  'name': 'John Doe',
  'age': 30,
});

5. 查询数据

使用 query 方法查询数据:

List<Map<String, dynamic>> users = await CrazyDB.query('users');
for (var user in users) {
  print('User: ${user['name']}, Age: ${user['age']}');
}

你还可以使用 where 参数来过滤查询结果:

List<Map<String, dynamic>> users = await CrazyDB.query('users', where: 'age > ?', whereArgs: [25]);

6. 更新数据

使用 update 方法更新数据:

int rowsAffected = await CrazyDB.update('users', {
  'age': 31,
}, where: 'id = ?', whereArgs: [1]);

7. 删除数据

使用 delete 方法删除数据:

int rowsAffected = await CrazyDB.delete('users', where: 'id = ?', whereArgs: [1]);

8. 删除表

使用 dropTable 方法删除表:

await CrazyDB.dropTable('users');

9. 关闭数据库

在应用程序退出时,你可以关闭数据库:

await CrazyDB.close();
回到顶部