📅  最后修改于: 2023-12-03 15:20:14.030000             🧑  作者: Mango
sqflite
是一种用于构建 Flutter 应用的轻量级本地数据库解决方案。 它提供了一个简单的 API,以便在 iOS 和 Android 上执行 SQL 操作,并且具有事务支持和查询辅助函数。
sqflite
不需要任何附加的安装即可使用,并可以使用 Dart 的所有优点,例如 Futures 和 Stream。
在 pubspec.yaml
文件中添加下面这行代码:
dependencies:
sqflite: ^<latest_version>
安装最新版本的 sqflite
,运行下面的命令。
flutter packages get
在应用程序中,需要通过调用 openDatabase
函数创建一个数据库实例。该函数返回一个 Future<Database>
,该类型代表对数据库的引用。
Future<Database> database = openDatabase(
// Set the path to the database. Note: Using the `join` function from the
// `path` package is best practice to ensure the path is correctly
// constructed for each platform.
join(await getDatabasesPath(), 'doggie_database.db'),
// When the database is first created, create a table to store dogs.
onCreate: (db, version) {
// Run the CREATE TABLE statement on the database.
return db.execute(
'CREATE TABLE dogs(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)',
);
},
// Set the version. This executes the onCreate function and provides a
// path to perform database upgrades and downgrades.
version: 1,
);
在这个例子中,我们使用 join
函数来获取设备特定的储存路径,然后在该路径下创建名为 doggie_database.db
的 SQLite 数据库。 我们也指定了 onCreate
函数,该函数将在链接到新数据库时首次运行。 在此例子中,我们创建了一个 dogs
表,用于存储狗的信息。
如果应用程序当前已有一个数据库,则可以传递数据库路径以连接到该数据库。
Future<void> insertDog(Dog dog) async {
final Database db = await database;
await db.insert(
'dogs',
dog.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
在上面的例子中,我们向 dogs
表添加了一条新记录。 该记录的数据由 Dog
对象提供的 toMap
函数生成。 conflictAlgorithm
参数指示 SQLite 在出现冲突时应如何处理。在此示例中,如果记录已经存在,则用新数据替换它。
Future<List<Dog>> dogs() async {
final Database db = await database;
final List<Map<String, dynamic>> maps = await db.query('dogs');
// Convert the List<Map<String, dynamic> into a List<Dog>.
return List.generate(maps.length, (i) {
return Dog(
id: maps[i]['id'],
name: maps[i]['name'],
age: maps[i]['age'],
);
});
}
在上面的代码片段中,我们查询了所有记录,并将结果转换为 Dog
对象的列表。
Future<void> updateDog(Dog dog) async {
final db = await database;
await db.update(
'dogs',
dog.toMap(),
where: 'id = ?',
whereArgs: [dog.id],
);
}
在这个例子中,我们通过调用 update
函数来更新数据库中的记录。 where
参数指定了要更新的记录的条件。在这个例子中,我们仅更新 id
与指定 Dog
的 id
相匹配的记录。 whereArgs
参数包含值,该值将替换 where
中的问号占位符。 同样,这种做法可以帮助防止 SQL 注入攻击。
Future<void> deleteDog(int id) async {
final db = await database;
await db.delete(
'dogs',
where: 'id = ?',
whereArgs: [id],
);
}
在这个示例中,我们从数据库中删除了一条记录。 where
参数指定了要删除的记录的条件。在这个例子中,我们仅删除 id
与指定 id
相匹配的记录。 whereArgs
参数包含值,该值将替换 where
中的问号占位符。 同样,这种做法可以帮助防止 SQL 注入攻击。
sqflite
是一款出色的本地数据库解决方案,它提供了一个简单的 API,以便在 iOS 和 Android 上执行 SQL 操作,并且具有事务支持和查询辅助函数。 在 Flutter 应用程序中使用 sqflite
不需要任何附加的安装,它是一个轻量级的库,并且可以使用 Dart 的所有优点,例如 Futures 和 Stream。