Flutter数据库管理插件octodb_sqflite_common的使用
Flutter数据库管理插件octodb_sqflite_common
的使用
本文将详细介绍如何使用Flutter的sqflite_common
插件。请注意,此插件通常不建议直接使用,而是作为其他插件(如sqflite
)的基础依赖。
简介
sqflite_common
是一个用于数据库操作的通用库,主要用于支持Flutter的跨平台数据库功能。它为桌面端和单元测试提供了额外的支持。
使用场景
- 移动设备:推荐使用
sqflite
插件。 - 桌面端:推荐使用
sqflite_common_ffi
插件。 - 单元测试:同样可以结合
sqflite_common
进行测试。
示例代码
以下是一个简单的示例,展示如何使用 sqflite_common
插件进行基本的数据库操作。
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
import 'package:sqflite/sqflite.dart';
Future<void> main() async {
// 初始化 sqflite_common 的 ffi 支持(仅在桌面端使用)
sqfliteFfiInit();
// 打开数据库
final databasePath = await getDatabasesPath();
final db = await openDatabase(
'$databasePath/test.db',
version: 1,
onCreate: (db, version) async {
// 创建表
await db.execute('''
CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER
)
''');
},
);
// 插入数据
await db.insert('test', {'name': 'Alice', 'age': 25});
await db.insert('test', {'name': 'Bob', 'age': 30});
// 查询数据
List<Map<String, dynamic>> result = await db.query('test');
print(result);
// 更新数据
await db.update('test', {'age': 26}, where: 'name = ?', whereArgs: ['Alice']);
// 删除数据
await db.delete('test', where: 'name = ?', whereArgs: ['Bob']);
// 关闭数据库
await db.close();
}
代码说明
-
初始化
sqflite_common
的 ffi 支持:sqfliteFfiInit();
此方法仅在桌面端使用,用于初始化 SQLite 的本地支持。
-
打开数据库:
final databasePath = await getDatabasesPath(); final db = await openDatabase( '$databasePath/test.db', version: 1, onCreate: (db, version) async { await db.execute(...); }, );
getDatabasesPath()
:获取数据库存储路径。openDatabase()
:打开或创建数据库文件。onCreate
:数据库首次创建时执行的操作。
-
插入数据:
await db.insert('test', {'name': 'Alice', 'age': 25});
使用
insert
方法向表中插入数据。 -
查询数据:
List<Map<String, dynamic>> result = await db.query('test'); print(result);
查询表中的所有数据并打印结果。
-
更新数据:
await db.update('test', {'age': 26}, where: 'name = ?', whereArgs: ['Alice']);
更新指定条件的数据。
-
删除数据:
await db.delete('test', where: 'name = ?', whereArgs: ['Bob']);
删除满足条件的数据。
-
关闭数据库:
await db.close();
更多关于Flutter数据库管理插件octodb_sqflite_common的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库管理插件octodb_sqflite_common的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
octodb_sqflite_common
是一个用于 Flutter 的数据库管理插件,它基于 sqflite
库,提供了更高级的抽象和功能,使得在 Flutter 应用中管理 SQLite 数据库变得更加简单和高效。以下是如何使用 octodb_sqflite_common
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 octodb_sqflite_common
插件的依赖:
dependencies:
flutter:
sdk: flutter
octodb_sqflite_common: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化数据库
在使用 octodb_sqflite_common
之前,你需要初始化数据库。通常,你可以在应用的 main
函数中完成这个操作。
import 'package:octodb_sqflite_common/octodb_sqflite_common.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化数据库
await OctoDB.initialize(
databaseName: 'my_database.db',
version: 1,
onCreate: (db, version) async {
// 创建表
await db.execute('''
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
''');
},
onUpgrade: (db, oldVersion, newVersion) async {
// 数据库升级逻辑
},
);
runApp(MyApp());
}
3. 使用数据库
初始化数据库后,你可以使用 OctoDB
类来执行各种数据库操作。
插入数据
Future<void> insertUser(User user) async {
final db = await OctoDB.database;
await db.insert(
'users',
user.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
查询数据
Future<List<User>> getUsers() async {
final db = await OctoDB.database;
final List<Map<String, dynamic>> maps = await db.query('users');
return List.generate(maps.length, (i) {
return User.fromMap(maps[i]);
});
}
更新数据
Future<void> updateUser(User user) async {
final db = await OctoDB.database;
await db.update(
'users',
user.toMap(),
where: 'id = ?',
whereArgs: [user.id],
);
}
删除数据
Future<void> deleteUser(int id) async {
final db = await OctoDB.database;
await db.delete(
'users',
where: 'id = ?',
whereArgs: [id],
);
}
4. 关闭数据库
在应用退出时,你可以选择关闭数据库以释放资源。
Future<void> closeDatabase() async {
final db = await OctoDB.database;
await db.close();
}
5. 示例模型类
以下是一个简单的 User
模型类,用于映射数据库中的 users
表。
class User {
int id;
String name;
int age;
User({this.id, this.name, this.age});
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'age': age,
};
}
factory User.fromMap(Map<String, dynamic> map) {
return User(
id: map['id'],
name: map['name'],
age: map['age'],
);
}
}
6. 完整示例
以下是一个完整的示例,展示了如何使用 octodb_sqflite_common
插件进行数据库操作。
import 'package:flutter/material.dart';
import 'package:octodb_sqflite_common/octodb_sqflite_common.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await OctoDB.initialize(
databaseName: 'my_database.db',
version: 1,
onCreate: (db, version) async {
await db.execute('''
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
''');
},
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
[@override](/user/override)
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
List<User> users = [];
[@override](/user/override)
void initState() {
super.initState();
_loadUsers();
}
Future<void> _loadUsers() async {
final List<User> userList = await getUsers();
setState(() {
users = userList;
});
}
Future<void> _addUser() async {
final user = User(name: 'John Doe', age: 30);
await insertUser(user);
_loadUsers();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('OctoDB Example'),
),
body: ListView.builder(
itemCount: users.length,
itemBuilder: (context, index) {
final user = users[index];
return ListTile(
title: Text(user.name),
subtitle: Text('Age: ${user.age}'),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: _addUser,
child: Icon(Icons.add),
),
);
}
}
class User {
int id;
String name;
int age;
User({this.id, this.name, this.age});
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'age': age,
};
}
factory User.fromMap(Map<String, dynamic> map) {
return User(
id: map['id'],
name: map['name'],
age: map['age'],
);
}
}
Future<void> insertUser(User user) async {
final db = await OctoDB.database;
await db.insert(
'users',
user.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
Future<List<User>> getUsers() async {
final db = await OctoDB.database;
final List<Map<String, dynamic>> maps = await db.query('users');
return List.generate(maps.length, (i) {
return User.fromMap(maps[i]);
});
}