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
更多关于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. 创建表
你可以使用 CrazyDB
的 createTable
方法来创建表:
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();