Flutter数据库管理插件quds_db的使用
Flutter数据库管理插件quds_db的使用
quds_db
是 sqflite
的自动化版本!
如何使用
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
更多关于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
插件进行数据库管理。你可以根据实际需求扩展这些功能。