Flutter数据库管理插件scientisst_db的使用
Flutter数据库管理插件scientisst_db的使用
安装
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
scientisst_db: ^0.1.2
架构
数据库存储在应用程序文档目录中,该目录由 path_provider
提供。
数据库目录存储在一个名为 scientisst_db
的根文件夹中。
第一层仅包含 collections
,每个 collection
都有一个对应的目录。每个 collection
目录由三个独立的文件夹组成:collections
、documents
和 metadata
。collection
的子 documents
存储在 documents
文件夹中,每个 document
都有自己的文件,文件名与 ObjectId
对应。ObjectId
是根据 MongoDB 的标准生成的,也可以是一个任意的 String
。document
数据以 JSON 格式存储在文本文件中。
每个 document
都有一个对应的 metadata
文件,存储在 collection
目录内的 metadata
文件夹中,文件名与 ObjectId
相同,并且也是以 JSON 格式编码的。
一个 document
可以存储 collections
(子集合),这些 collections
存储在父 collection
目录下的 collections
文件夹内。这个文件夹的文件名与 document
的 ObjectId
相同,并遵循相同的 collection
结构。
示例
完整的示例可以查看 这里。
一些基本示例:
添加文档到集合
DocumentReference doc = await ScientISSTdb.instance.collection("movies").add(
{
"title": "Eternal Sunshine of the Spotless Mind",
"year": 2004,
"characters": [
"Joel",
"Clementine",
],
},
);
更新文档
await doc.update(
{
"title": "Hello world",
},
);
删除文档
await ScientISSTdb.instance.collection("movies").document("507f1f77bcf86cd7994ca120").delete();
获取集合中的所有文档
await ScientISSTdb.instance.collection("movies").getDocuments();
按字段值排序文档
await ScientISSTdb.instance
.collection("movies")
.orderBy("year", ascending: false)
.getDocuments();
示例代码
以下是在 main.dart
中使用 scientisst_db
插件的基本示例:
import 'package:scientisst_db/scientisst_db.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Example(),
);
}
}
class Example extends StatefulWidget {
[@override](/user/override)
_ExampleState createState() => _ExampleState();
}
class _ExampleState extends State<Example> {
[@override](/user/override)
void initState() {
super.initState();
generateDB();
}
void generateDB() async {
// 清除数据库
await ScientISSTdb.clearDatabase(confirm: true);
// 添加电影数据
await ScientISSTdb.instance.collection("movies").add(
{
"title": "Eternal Sunshine of the Spotless Mind",
"year": 2004,
"characters": [
"Joel",
"Clementine",
],
},
);
// 添加另一部电影及其演员
DocumentReference inception = await ScientISSTdb.instance.collection("movies").add(
{
"title": "Inception",
"year": 2010,
"characters": [
"Cobb",
"Arthur",
"Ariadne",
],
},
);
await ScientISSTdb.instance
.collection("movies")
.document(inception.id)
.collection("actors")
.add(
{
"name": "Leonardo DiCaprio",
"birthdate": DateTime(1974, 10, 11),
},
);
await ScientISSTdb.instance
.collection("movies")
.document(inception.id)
.collection("actors")
.add(
{
"name": "Joseph Gordon-Levitt",
"birthdate": DateTime(1981, 2, 17),
},
);
// 更新UI状态
setState(() {});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Movies"),
),
body: SafeArea(
child: FutureBuilder(
future: ScientISSTdb.instance
.collection("movies")
.orderBy("year", descending: false)
.getDocuments(),
builder: (BuildContext context,
AsyncSnapshot<List<DocumentSnapshot>> snap) {
if (snap.hasError || snap.data == null)
return Container();
else
return ListView.builder(
itemCount: snap.data!.length,
itemBuilder: (BuildContext context, int index) => ListTile(
title: Text(
snap.data![index].data["title"],
),
subtitle: Text(
snap.data![index].data["year"].toString(),
),
),
);
},
),
),
);
}
}
更多关于Flutter数据库管理插件scientisst_db的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库管理插件scientisst_db的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 scientist_db
插件在 Flutter 中进行数据库管理的代码示例。scientist_db
是一个用于管理 SQLite 数据库的 Flutter 插件,它提供了一套简单的 API 来执行常见的数据库操作。
首先,你需要在 pubspec.yaml
文件中添加 scientist_db
依赖:
dependencies:
flutter:
sdk: flutter
scientist_db: ^最新版本号 # 请替换为实际的最新版本号
然后运行 flutter pub get
来获取依赖。
接下来是一个完整的 Flutter 应用示例,展示了如何使用 scientist_db
进行基本的数据库操作:
import 'package:flutter/material.dart';
import 'package:scientist_db/scientist_db.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Scientist DB Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
ScientistDB _db;
@override
void initState() {
super.initState();
_initDatabase();
}
Future<void> _initDatabase() async {
// 初始化数据库
_db = ScientistDB(
databaseName: 'demo.db',
version: 1,
);
// 创建表
await _db.createTable(
tableName: 'users',
columns: [
ColumnInfo(name: 'id', type: ColumnType.integer, primaryKey: true, autoIncrement: true),
ColumnInfo(name: 'name', type: ColumnType.text, notNull: true),
ColumnInfo(name: 'email', type: ColumnType.text, unique: true),
],
);
}
Future<void> _insertUser(String name, String email) async {
await _db.insert(
tableName: 'users',
values: {
'name': name,
'email': email,
},
);
}
Future<List<Map<String, dynamic>>> _queryUsers() async {
return await _db.query(tableName: 'users');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Scientist DB Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
ElevatedButton(
onPressed: () async {
await _insertUser('John Doe', 'john@example.com');
setState(() {}); // 刷新界面
},
child: Text('Insert User'),
),
SizedBox(height: 16),
ElevatedButton(
onPressed: () async {
List<Map<String, dynamic>> users = await _queryUsers();
// 打印用户列表
users.forEach((user) => print(user));
// 可以在这里显示用户列表,为了简单起见,这里只打印出来
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Fetched ${users.length} users'),
),
);
},
child: Text('Query Users'),
),
],
),
),
);
}
}
代码解释:
-
依赖管理:
- 在
pubspec.yaml
中添加scientist_db
依赖。
- 在
-
数据库初始化:
- 在
initState
方法中调用_initDatabase
方法来初始化数据库并创建表。
- 在
-
创建表:
- 使用
_db.createTable
方法来创建一个名为users
的表,包含id
、name
和email
列。
- 使用
-
插入数据:
- 使用
_db.insert
方法向users
表中插入一条记录。
- 使用
-
查询数据:
- 使用
_db.query
方法从users
表中查询所有记录,并打印出来。
- 使用
-
UI:
- 使用
ElevatedButton
创建两个按钮,一个用于插入用户数据,另一个用于查询并显示用户数据。
- 使用
这个示例展示了如何使用 scientist_db
插件进行基本的数据库操作。根据实际需求,你可以进一步扩展这个示例,比如添加更多的表、列、以及更复杂的查询和更新操作。