插件介绍
sqlite3.dart 是一个 Dart 包,用于通过 dart:ffi 直接访问 SQLite 数据库。该插件已适配鸿蒙平台,提供了以下核心功能:
- 纯 Dart 实现:不依赖 Flutter,可以在 Flutter 应用或独立 Dart 应用中使用
- 高性能:通过 FFI 直接调用 SQLite 原生库,性能优于其他 SQLite 插件
- 完整的 SQL 支持:支持所有 SQLite 功能,包括事务、预处理语句、视图等
- 多平台支持:支持鸿蒙、Android、iOS、Windows、macOS 和 Linux
- 轻量级:体积小,不包含冗余代码
安装与使用
1. 安装方式
在项目的 pubspec.yaml 文件中添加以下依赖配置:
yaml
dependencies:
sqlite3:
git:
url: "https://atomgit.com/fluttertpc/fluttertpc_sqlite3.dart.git"
path: "sqlite3"
sqlite3_flutter_libs:
git:
url: "https://atomgit.com/fluttertpc/fluttertpc_sqlite3.dart.git"
path: "sqlite3_flutter_libs"
执行命令安装依赖:
bash
flutter pub get
2. 基本使用示例
2.1 打开数据库
dart
import 'package:sqlite3/sqlite3.dart';
void main() {
// 打开内存数据库
final db = sqlite3.openInMemory();
// 打开文件数据库
// final db = sqlite3.open('path/to/database.db');
print('Database opened successfully');
}
2.2 执行 SQL 语句
dart
import 'package:sqlite3/sqlite3.dart';
void main() {
final db = sqlite3.openInMemory();
// 创建表
db.execute('''
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE
)
''');
// 插入数据
db.execute('''
INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')
''');
print('Table created and data inserted successfully');
}
2.3 查询数据
dart
import 'package:sqlite3/sqlite3.dart';
void main() {
final db = sqlite3.openInMemory();
// 查询数据
final result = db.select('SELECT * FROM users');
// 遍历结果
for (final row in result) {
print('User: ${row['name']} (${row['email']})');
}
}
2.4 预处理语句
dart
import 'package:sqlite3/sqlite3.dart';
void main() {
final db = sqlite3.openInMemory();
// 创建预处理语句
final stmt = db.prepare('INSERT INTO users (name, email) VALUES (?, ?)');
// 绑定参数并执行
stmt.execute(['Alice', 'alice@example.com']);
stmt.execute(['Bob', 'bob@example.com']);
// 关闭预处理语句
stmt.dispose();
print('Data inserted successfully using prepared statement');
}
2.5 事务处理
dart
import 'package:sqlite3/sqlite3.dart';
void main() {
final db = sqlite3.openInMemory();
// 开始事务
db.execute('BEGIN TRANSACTION');
try {
// 执行多个操作
db.execute('INSERT INTO users (name, email) VALUES ('Charlie', 'charlie@example.com')');
db.execute('INSERT INTO users (name, email) VALUES ('David', 'david@example.com')');
// 提交事务
db.execute('COMMIT');
print('Transaction committed successfully');
} catch (e) {
// 回滚事务
db.execute('ROLLBACK');
print('Transaction rolled back: $e');
}
}
2.6 关闭数据库
dart
import 'package:sqlite3/sqlite3.dart';
void main() {
final db = sqlite3.openInMemory();
// 执行操作...
// 关闭数据库
db.dispose();
print('Database closed successfully');
}
3. 高级使用示例
3.1 批量插入
dart
import 'package:sqlite3/sqlite3.dart';
void main() {
final db = sqlite3.openInMemory();
// 创建表
db.execute('''
CREATE TABLE products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price REAL NOT NULL
)
''');
// 批量插入
final stmt = db.prepare('INSERT INTO products (name, price) VALUES (?, ?)');
final products = [
['Product 1', 10.99],
['Product 2', 19.99],
['Product 3', 5.99],
];
for (final product in products) {
stmt.execute(product);
}
stmt.dispose();
print('Batch insert completed successfully');
}
3.2 事务处理
dart
import 'package:sqlite3/sqlite3.dart';
void main() {
final db = sqlite3.openInMemory();
// 开始事务
db.execute('BEGIN TRANSACTION');
try {
// 执行多个操作
db.execute('INSERT INTO users (name, email) VALUES ('Eve', 'eve@example.com')');
db.execute('INSERT INTO users (name, email) VALUES ('Frank', 'frank@example.com')');
// 提交事务
db.execute('COMMIT');
print('Transaction committed successfully');
} catch (e) {
// 回滚事务
db.execute('ROLLBACK');
print('Transaction rolled back: $e');
}
}
4. 核心 API 说明
| 方法名 | 功能描述 | 参数说明 | 返回值类型 |
|---|---|---|---|
| open(String path) | 打开文件数据库 | path:数据库文件路径 |
Database |
| openInMemory() | 打开内存数据库 | / | Database |
| execute(String sql) | 执行 SQL 语句 | sql:要执行的 SQL 语句 |
void |
| select(String sql) | 执行查询语句 | sql:要执行的查询语句 |
List<Map<String, dynamic>> |
| prepare(String sql) | 创建预处理语句 | sql:要预处理的 SQL 语句 |
PreparedStatement |
| dispose() | 关闭数据库 | / | void |
约束与限制
兼容性
该插件已在以下环境中进行了测试:
- Flutter: 3.7.12-ohos-1.0.6; SDK: 5.0.0(12); IDE: DevEco Studio: 5.0.13.200; ROM: 5.1.0.120 SP3;
- Flutter: 3.22.1-ohos-1.0.1; SDK: 5.0.0(12); IDE: DevEco Studio: 5.0.13.200; ROM: 5.1.0.120 SP3;
注意事项
- 文件路径:在鸿蒙平台上,需要使用正确的文件路径来存储数据库文件
- 权限:需要获取文件读写权限才能访问数据库文件
- 线程安全:SQLite 不是线程安全的,需要在单线程中使用或使用锁机制
- 资源管理:需要及时关闭数据库和预处理语句,以释放资源
总结
sqlite3.dart 插件为鸿蒙平台提供了一个高性能、轻量级的 SQLite 数据库解决方案。通过该插件,开发者可以直接使用 SQL 语句进行数据库操作,无需依赖其他 ORM 框架。该插件适用于各种需要本地数据存储的场景,包括离线应用、缓存数据等。
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net