Flutter 插件 sqflite
yuuki Lv5

什么是sqflite

sqflite是一个 Flutter 插件。它允许我们通过 flutter 代码存储、检索和操作我们的 sqflite数据库。sqflite支持 Android 和 iOS 平台。

  1. sqflite提供数据库事务和批处理。
  2. sqflite具有内置的自动版本管理。
  3. sqflite提供了易于使用的方法来插入、查询、更新以及从数据库中删除数据。
  4. 这些 CRUD 操作在 iOS 和 Android 的后台线程中执行。这可以释放 UI 以保持响应。

安装sqflite

  1. 在pubspec.yaml 中添加

    1
    2
    dependencies:
    sqflite: ^0.12.1
  2. 然后使用 flutter pub get命令,flutter就会将sqflite安装到你的项目中。

基本使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// 获得数据库路径
var databasesPath = await getDatabasesPath();
String path = join(databasesPath, 'demo.db');

// 删除数据库
await deleteDatabase(path);

// 打开数据库
Database database = await openDatabase(path, version: 1,
onCreate: (Database db, int version) async {
// 创建数据库的时候创建表
await db.execute(
'CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT, value INTEGER, num REAL)');
});

// INSERT
await database.transaction((txn) async {
int id1 = await txn.rawInsert(
'INSERT INTO Test(name, value, num) VALUES("some name", 1234, 456.789)');
print('inserted1: $id1');
int id2 = await txn.rawInsert(
'INSERT INTO Test(name, value, num) VALUES(?, ?, ?)',
['another name', 12345678, 3.1416]);
print('inserted2: $id2');
});

// UPDATE
int count = await database.rawUpdate(
'UPDATE Test SET name = ?, value = ? WHERE name = ?',
['updated name', '9876', 'some name']);
print('updated: $count');

// SELECT
List<Map> list = await database.rawQuery('SELECT * FROM Test');
List<Map> expectedList = [
{'name': 'updated name', 'id': 1, 'value': 9876, 'num': 456.789},
{'name': 'another name', 'id': 2, 'value': 12345678, 'num': 3.1416}
];
print(list);
print(expectedList);
assert(const DeepCollectionEquality().equals(list, expectedList));

// Count the records
count = Sqflite
.firstIntValue(await database.rawQuery('SELECT COUNT(*) FROM Test'));
assert(count == 2);

// DELETE
count = await database
.rawDelete('DELETE FROM Test WHERE name = ?', ['another name']);
assert(count == 1);

// 关闭数据库
await database.close();
 评论