Flutter数据库管理插件fbdb的使用
Flutter数据库管理插件fbdb的使用
概览
fbdb
是一个用于Firebird数据库管理系统的Dart客户端。它提供了基于future、异步方法和流的高层API,以及围绕原生Firebird客户端接口的低层包装。需要注意的是,使用该库需要有本地Firebird客户端库(根据操作系统不同,可能是fbclient.dll
、libfbclient.so
或libfbclient.dylib
)及其依赖项。
Firebird名称和标志是Firebird Foundation的注册商标,经许可使用。
功能特性
- 完全异步与Firebird数据库通信,非常适合Flutter GUI应用及服务器端Dart应用。
- 提供两种选择:高层、符合Dart习惯的库,或低层原生Firebird客户端绑定。
- 利用Dart高级概念如isolate、stream、future和FFI,同时提供给开发者简单便捷的接口。
- 支持数据库事务和BLOBs。
- 调用官方Firebird客户端动态库中的本地函数。
- 免费使用且开源(BSD-3许可证)。
使用示例
简单查询示例
我们将编写一个简单的控制台应用程序来展示如何从名为employee
的数据库中获取前10名员工的名字。
步骤1: 创建项目并添加依赖
dart create -t console fbdbtestproj
cd fbdbtestproj
dart pub add fbdb
步骤2: 编写代码
将main.dart
文件的内容替换为以下代码:
import "package:fbdb/fbdb.dart";
void main() async {
// 连接到数据库,请确保正确填写host, user, password信息
FbDb db = await FbDb.attach(
host: "localhost", // 数据库主机地址
database: "employee", // 数据库名称
user: "SYSDBA", // 用户名
password: "masterkey", // 密码
);
try {
final q = db.query();
await q.openCursor(
sql: "select FIRST_NAME, LAST_NAME "
"from EMPLOYEE "
"order by LAST_NAME "
"rows 10 ",
);
// 打印结果
await for (var r in q.rows()) {
print("${r['LAST_NAME']}, ${r['FIRST_NAME']}");
}
} finally {
// 关闭资源
await db.detach();
}
}
步骤3: 添加必要的本地库
根据您的操作系统下载对应的Firebird客户端库,并将其放置在项目的根目录下。例如,在Windows上你需要fbclient.dll
以及它的依赖文件(如msvcp140.dll
和vcruntime140.dll
)。
步骤4: 运行程序
dart run
如果一切顺利,您应该会在控制台上看到如下输出:
Baldwin, Janet
Bender, Oliver H.
Bennet, Ann
Bishop, Dana
Brown, Kelly
Burbank, Jennifer M.
Cook, Kevin
De Souza, Roger
Ferrari, Roberto
Fisher, Pete
更多信息
文档与资源
强烈建议阅读FbDb程序员指南 和 FbDb架构概述,以更好地理解如何使用此库。
此外,还有更多详细的例子可以在GitHub仓库找到,涵盖了从基本操作到更复杂的功能实现。
生成API文档
如果您想要生成API文档,可以克隆仓库并在根目录执行命令:
dart doc
生成的API文档将保存在docs/API
子目录中。
结论
通过上述步骤,您已经成功地使用了fbdb
插件连接到了Firebird数据库,并实现了基本的数据读取功能。随着对库的理解加深,您可以探索更多高级特性和最佳实践,从而构建更加复杂的数据库驱动的应用程序。如果有任何问题或者需要进一步的帮助,请参考官方提供的教程和其他资源。
更多关于Flutter数据库管理插件fbdb的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库管理插件fbdb的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用Flutter数据库管理插件fbdb
的示例代码。fbdb
是一个假想的插件名称,因为实际上并没有一个广泛知名的Flutter插件直接名为fbdb
。然而,为了演示,我们将假设fbdb
是一个SQLite数据库管理插件,因为SQLite是Flutter开发中常用的数据库之一。
在实际应用中,你可能会使用如sqflite
这样的流行插件。但为了满足你的要求,我们将以fbdb
为假设名称来编写代码。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加fbdb
依赖(注意:这里fbdb
是假设的,实际使用时请替换为真实的插件名,如sqflite
):
dependencies:
flutter:
sdk: flutter
fbdb: ^x.y.z # 替换为实际版本号
然后运行flutter pub get
来安装依赖。
2. 初始化数据库
在你的Flutter应用中,你需要初始化数据库并打开一个连接。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:fbdb/fbdb.dart'; // 假设的导入路径
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late Database _db;
@override
void initState() {
super.initState();
_initializeDatabase();
}
Future<void> _initializeDatabase() async {
// 打开数据库连接(如果数据库不存在,则创建一个新的)
_db = await openDatabase(
join(await getDatabasesPath(), 'demo.db'),
onCreate: (db, version) async {
// 在这里创建表
await db.execute(
'CREATE TABLE Users('
'id INTEGER PRIMARY KEY,'
'name TEXT NOT NULL,'
'age INTEGER NOT NULL'
')',
);
},
version: 1,
);
}
// 其他业务逻辑...
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Demo'),
),
body: Center(
child: Text('Database initialized!'),
),
);
}
}
3. 插入数据
以下是如何在数据库中插入数据的示例:
Future<void> _insertData() async {
// 插入一条新记录
await _db.insert(
'Users',
{
'name': 'Alice',
'age': 30,
},
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
4. 查询数据
以下是如何从数据库中查询数据的示例:
Future<List<Map<String, dynamic>>> _queryData() async {
// 查询所有用户
return await _db.query('Users');
}
5. 更新数据
以下是如何更新数据库中数据的示例:
Future<void> _updateData() async {
// 更新用户的年龄
await _db.update(
'Users',
{
'age': 31,
},
where: 'id = ?',
whereArgs: [1],
);
}
6. 删除数据
以下是如何从数据库中删除数据的示例:
Future<void> _deleteData() async {
// 删除用户
await _db.delete(
'Users',
where: 'id = ?',
whereArgs: [1],
);
}
完整示例
将上述代码片段整合到一个完整的示例中:
import 'package:flutter/material.dart';
import 'package:fbdb/fbdb.dart'; // 假设的导入路径
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late Database _db;
@override
void initState() {
super.initState();
_initializeDatabase();
}
Future<void> _initializeDatabase() async {
_db = await openDatabase(
join(await getDatabasesPath(), 'demo.db'),
onCreate: (db, version) async {
await db.execute(
'CREATE TABLE Users('
'id INTEGER PRIMARY KEY,'
'name TEXT NOT NULL,'
'age INTEGER NOT NULL'
')',
);
},
version: 1,
);
}
Future<void> _insertData() async {
await _db.insert(
'Users',
{
'name': 'Alice',
'age': 30,
},
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
Future<List<Map<String, dynamic>>> _queryData() async {
return await _db.query('Users');
}
Future<void> _updateData() async {
await _db.update(
'Users',
{
'age': 31,
},
where: 'id = ?',
whereArgs: [1],
);
}
Future<void> _deleteData() async {
await _db.delete(
'Users',
where: 'id = ?',
whereArgs: [1],
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
await _insertData();
print('Data inserted!');
},
child: Text('Insert Data'),
),
ElevatedButton(
onPressed: () async {
final data = await _queryData();
print('Data queried: $data');
},
child: Text('Query Data'),
),
ElevatedButton(
onPressed: () async {
await _updateData();
print('Data updated!');
},
child: Text('Update Data'),
),
ElevatedButton(
onPressed: () async {
await _deleteData();
print('Data deleted!');
},
child: Text('Delete Data'),
),
],
),
),
);
}
}
请注意,上述代码使用了假设的fbdb
插件。在实际应用中,请替换为如sqflite
这样的真实插件,并根据其文档调整代码。