Flutter数据库查询插件sqflite_laravel_style_queries的使用
Flutter数据库查询插件sqflite_laravel_style_queries的使用
Sqflite Easy Query 是一个为初学者设计的新Flutter项目,旨在简化SQLite查询。本文档将详细介绍如何使用该插件进行数据库操作。
开源问题反馈
如果您在使用过程中遇到任何问题,可以在GitHub仓库上提交问题。
重要提示
- 如果您的版本低于0.0.8,请确保更新所有值以触发更新事件ID,并且在模型类中使每个变量可为空。
- 建议使用版本1.0.0或更高版本。
第一步:仅适用于版本低于0.0.8 的扩展并添加表名到模型类
对于版本0.0.8及以下的用户,可以参考以下示例:
class UserDbModel extends AzSqflite {
String tableName = 'users';
// 其他字段
}
第二步:迁移
创建表的示例
注意:主键或自动递增只能用于表中的一个列,否则会抛出异常。创建表时至少需要添加一列。
版本0.0.8及以上
await AzSqflite().table('users')
.addColumn(name: "column_name_one", type: ColumnType.integer, isPrimaryKey: true, isAutoIncrement: true)
.addColumn(name: "column_name_two", type: ColumnType.text, isNUll: true)
.execute();
版本0.0.8以下
await UserDbModel()
.addColumn(name: "column_name_one", type: ColumnType.integer, isPrimaryKey: true, isAutoIncrement: true)
.addColumn(name: "column_name_two", type: ColumnType.text, isNUll: true)
.execute();
删除表的示例
版本0.0.8及以上
await AzSqflite().table('users').dropTable().execute();
版本0.0.8以下
await UserDbModel().dropTable().execute();
添加列到现有表的示例
版本0.0.8及以上
await AzSqflite().table('users')
.addColumn(name: "column_name_three", type: ColumnType.text, isNUll: true)
.execute();
版本0.0.8以下
await UserDbModel()
.addColumn(name: "column_name_three", type: ColumnType.text, isNUll: true)
.execute();
删除表中列的示例
目前不支持。
重命名表中列的示例
版本0.0.8及以上
await AzSqflite().table('users')
.renameColumn(oldName: "column_name_four", newName: "column_name_four")
.execute();
版本0.0.8以下
await UserDbModel()
.renameColumn(oldName: "column_name_four", newName: "column_name_four")
.execute();
第三步:表支持的查询动作
插入记录的示例
版本0.0.8及以上
AzSqflite().table('users').insert({"name": "name", "fatherName": "father"});
版本0.0.8以下
UserDbModel(name: "name", fatherName: "father").insert();
更新记录的示例
版本0.0.8及以上
AzSqflite().table('users').where("id", 1).update({"name": "name", "fatherName": "father"});
版本0.0.8以下
UserDbModel(id: 1, name: "name", fatherName: "father").where("id", 1).update();
删除记录的示例
版本0.0.8及以上
AzSqflite().table('users').where("id", 1).delete();
版本0.0.8以下
UserDbModel().delete();
获取记录的示例
版本0.0.8及以上
AzSqflite().table('users').get();
版本0.0.8以下
UserDbModel().get();
计数记录的示例
版本0.0.8及以上
AzSqflite().table('users').count();
版本0.0.8以下
UserDbModel().count();
提取特定列的示例
版本0.0.8及以上
AzSqflite().table('users').pluck('column_name');
版本0.0.8以下
UserDbModel().pluck('column_name');
第四步:处理实例输出
你可以通过以下方式获取查询实例的结果:
版本0.0.8及以上
await AzSqflite().table('users').get().queryResult;
或者
AzSqflite().table('users').get().queryResult.then((value) {
print(value);
});
版本0.0.8以下
await UserDbModel().get().queryResult;
或者
UserDbModel().get().queryResult.then((value) {
print(value);
});
可用方法
版本0.0.8及以上
await AzSqflite().table('users')
// .joining('INNER JOIN table_name_2 ON table_name.id = table_name_2.id')
// .select(['id','column_name_one']) // 选择特定列
// .whereBetween('id', ['1','10']) // 接受数组中的两个值
// .orWhereBetween('id', ['1','10']) // 接受数组中的两个值
// .whereIn('id', ['1','2','3'])
// .orWhereIn('column_name_one', '1', operator: Operator.equal)
// .whereNotIn('column_name_one', '1', operator: Operator.equal)
// .where('column_name_one', '1', operator: Operator.equal)
// .orWhere('column_name_one', '1', operator: Operator.equal)
// .whereNull(column_name_one)
// .orderBy('column_name_two', 'DESC')
// .groupBy('column_name')
// .skip(1)
// .limit(2)
// .page(2)
.get();
版本0.0.8以下
await UserDbModel()
// .joining('INNER JOIN table_name_2 ON table_name.id = table_name_2.id')
...
...
...
// .page(2)
.get();
完整示例Demo
以下是一个完整的示例代码,演示了如何使用 sqflite_laravel_style_queries
插件进行基本的数据库操作:
import 'package:flutter/material.dart';
import 'package:example/models/UserModel.dart';
import 'package:sqflite_laravel_style_queries/helper/models/column_types.dart';
import 'package:sqflite_laravel_style_queries/sqflite_laravel_style_queries.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 打开数据库
await AzSqflite().open();
print('开始 1');
// 创建数据库表(新方法)
print('创建表');
await AzSqflite().table('users6')
.addColumn(name: "id", type: ColumnType.integer, isPrimaryKey: true, isAutoIncrement: true)
.addColumn(name: "name", type: ColumnType.text, isNUll: true)
.addColumn(name: "fatherName", type: ColumnType.text, isNUll: true)
.execute();
print('开始 2');
// 插入记录示例
print('插入记录');
await AzSqflite().table('users6').insert({"name": "hassan 1", "fatherName": "Khawaja Muhammad Asghar Saqi"});
await AzSqflite().table('users6').insert({"name": "hassan 2", "fatherName": "Khawaja Muhammad Asghar Saqi"});
print('开始 3');
// 获取记录示例
print("插入后获取记录");
print(await AzSqflite().table('users6').get());
print('开始 4');
// 更新记录示例
await AzSqflite().table('users6').where('id', 1).update({"name": "hassan update 1", "fatherName": "Khawaja Muhammad Asghar Saqi"});
print('开始 5');
print("更新后获取记录");
print(await AzSqflite().table('users6').get());
print('开始 6');
// 删除单个记录示例
print('删除记录');
await AzSqflite().table('users6').where('id', 1).delete();
print('开始 7');
print("删除一个记录后获取记录");
print(await AzSqflite().table('users6').get());
print('开始 8');
// 删除所有记录示例
print('删除所有记录');
await AzSqflite().table('users6').delete();
print('开始 9');
print("删除所有记录后获取记录");
print(await AzSqflite().table('users6').get());
print('开始 10');
print('计数记录');
print(await AzSqflite().table('users6').count());
print('开始 11');
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Sqlflite Laravel Style',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.green),
useMaterial3: false,
),
home: const MyHomePage(title: 'Example of package'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Container(
width: MediaQuery.of(context).size.width,
child: const Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text("Example of package"),
Text("Hassan Mehmood"),
Text("https://zahidaz.com"),
],
),
),
);
}
}
更多关于Flutter数据库查询插件sqflite_laravel_style_queries的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库查询插件sqflite_laravel_style_queries的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
sqflite_laravel_style_queries
是一个 Flutter 插件,它提供了类似 Laravel 风格的数据库查询语法,简化了与 sqflite
数据库的交互。这个插件允许你使用链式调用的方式来进行数据库查询,类似于 Laravel 的 Eloquent ORM。
安装
首先,你需要在 pubspec.yaml
文件中添加 sqflite_laravel_style_queries
依赖:
dependencies:
flutter:
sdk: flutter
sqflite: ^2.0.0+4
sqflite_laravel_style_queries: ^1.0.0
然后运行 flutter pub get
来安装依赖。
基本使用
-
初始化数据库
首先,你需要初始化数据库并创建表。可以使用
sqflite
的openDatabase
方法来打开数据库。import 'package:sqflite/sqflite.dart'; import 'package:sqflite_laravel_style_queries/sqflite_laravel_style_queries.dart'; Future<void> initDatabase() async { final db = await openDatabase('my_database.db', version: 1, onCreate: (Database db, int version) async { await db.execute( 'CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT, email TEXT)'); }); // 初始化 sqflite_laravel_style_queries QueryBuilder.initialize(db); }
-
插入数据
你可以使用
insert
方法来插入数据。Future<void> insertUser() async { await QueryBuilder.table('users').insert({ 'name': 'John Doe', 'email': 'john@example.com', }); }
-
查询数据
你可以使用
get
方法来查询数据。Future<List<Map<String, dynamic>>> getUsers() async { return await QueryBuilder.table('users').get(); }
-
条件查询
你可以使用
where
方法来添加查询条件。Future<List<Map<String, dynamic>>> getUserByName(String name) async { return await QueryBuilder.table('users').where('name', '=', name).get(); }
-
更新数据
你可以使用
update
方法来更新数据。Future<void> updateUserEmail(int id, String newEmail) async { await QueryBuilder.table('users').where('id', '=', id).update({ 'email': newEmail, }); }
-
删除数据
你可以使用
delete
方法来删除数据。Future<void> deleteUser(int id) async { await QueryBuilder.table('users').where('id', '=', id).delete(); }
高级查询
-
排序
你可以使用
orderBy
方法来对查询结果进行排序。Future<List<Map<String, dynamic>>> getUsersOrderedByName() async { return await QueryBuilder.table('users').orderBy('name', 'desc').get(); }
-
限制和偏移
你可以使用
limit
和offset
方法来限制查询结果的数量和偏移量。Future<List<Map<String, dynamic>>> getUsersPaginated(int page, int perPage) async { return await QueryBuilder.table('users').limit(perPage).offset((page - 1) * perPage).get(); }
-
聚合函数
你可以使用
count
,sum
,avg
,min
,max
等聚合函数。Future<int> getTotalUsers() async { return await QueryBuilder.table('users').count(); }
关闭数据库
当你不再需要数据库时,记得关闭它。
Future<void> closeDatabase() async {
await QueryBuilder.close();
}