目录
引言
随着移动应用的发展,本地数据存储成为了一个不可或缺的功能。在Flutter中,sqflite
是一个非常流行且强大的SQLite插件,它允许开发者在移动设备上轻松地进行数据库操作。本文将通过具体的使用案例,详细介绍如何在Flutter项目中集成和使用 **sqflite
**进行数据存储和查询。
安装sqflite
首先,你需要在**pubspec.yaml
** 文件中添加**sqflite
**依赖:
Dart
dependencies:
flutter:
sdk: flutter
sqflite: ^2.3.3+1
然后运行 flutter pub get
来安装依赖,或者直接执行下面的命令
flutter pub add sqflite
创建表
Dart
// 创建表
Future<void> _onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE Domain (
id INTEGER PRIMARY KEY AUTOINCREMENT,
url TEXT
)
''');
}
查询数据
Dart
// 查看表的数据
Future<List<Map<String, dynamic>>> getItemsFromTable() async {
Database db = await database;
return await db.query("Domain");
}
// 查看存在某一条数据
Future<bool> checkIfQrExists(String url) async {
Database db = await database;
List<Map<String, dynamic>> results = await db.query(
'Domain',
where: 'url= ?',
whereArgs: [url],
);
return results.isNotEmpty;
}
添加数据
Dart
Future<void> insertDomain(String url) async {
Database db = await database;
await db.insert('Domain', {
'url': url,
});
}
删除数据
Dart
Future<void> deleteUrl(String url) async {
final db = await database;
await db.delete(
'Domain',
where: 'url = ?',
whereArgs: [url],
);
}
更新数据
Dart
Future<void> updateUrl(Map<String, dynamic> domain, String url) async {
final db = await database;
await db.update(
'Domain',
domain,
where: 'url = ?',
whereArgs: [url],
);
}
完整使用案例
Dart
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
class DatabaseHelper {
static final DatabaseHelper _instance = DatabaseHelper._internal();
factory DatabaseHelper() => _instance;
static Database? _database;
static const int databaseVersion = 2;
DatabaseHelper._internal();
Future<Database> get database async {
if (_database != null) return _database!;
_database = await _initDatabase();
return _database!;
}
Future<Database> _initDatabase() async {
// 初始化操作
String path = join(await getDatabasesPath(), 'app_database.db');
return await openDatabase(
path,
version: databaseVersion,
onCreate: _onCreate,
onUpgrade: _onUpgrade,
);
}
// 创建表
Future<void> _onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE Domain (
id INTEGER PRIMARY KEY AUTOINCREMENT,
url TEXT
)
''');
}
Future<void> _onUpgrade(Database db, int oldVersion, int newVersion) async {
print("版本号为$oldVersion");
if (oldVersion < 2) {
// 更新数据库的操作
}
}
// 查看表的数据
Future<List<Map<String, dynamic>>> getItemsFromTable() async {
Database db = await database;
return await db.query("Domain");
}
// 查看存在某一条数据
Future<bool> checkIfQrExists(String url) async {
Database db = await database;
List<Map<String, dynamic>> results = await db.query(
'Domain',
where: 'url= ?',
whereArgs: [url],
);
return results.isNotEmpty;
}
// 增加一条数据
Future<void> insertDomain(String url) async {
Database db = await database;
await db.insert('Domain', {
'url': url,
});
}
// 更新一条数据
Future<void> updateUrl(Map<String, dynamic> domain, String url) async {
final db = await database;
await db.update(
'Domain',
domain,
where: 'url = ?',
whereArgs: [url],
);
}
}
使用时
Dart
DatabaseHelper dbHelper = DatabaseHelper();
Future<void> getDatabaseData() async {
List<Map<String, dynamic>> data = await dbHelper.getItemsFromTable();
for (var item in data) {
print('Item: ${item.toString()}');
}
}