Flutter Widget 之sqfilte

243 阅读2分钟

有时,您的应用程序需要在设备上保存重要数据

如果是结构化数据,很可能您会要使用一个SQL数据库,一个几乎可以在renew设备上使用的SQL数据库引擎,包括手机,叫做SQLite。

它很小,且是自成一体的,它使用一个文件来存储和您的表,并且代码是公共域的

ezgif.com-gif-maker.gif Flutter开发者有很多种使用SQLite的选择 sqlite是最受欢迎的插件之一。

在sqflite中,通过调用openDatabase打开一个数据库文件

openDatabase('my_data.db');

sqflite中几乎所有的东西都是异步的 所以你必须await。

如果数据库尚不存在

  • 您还可以提供创建数据库的回调
  • 如果数据库使用旧模式 您还可以升级数据库
void myFuncrion() async {
    var db = await openDatabase('my_data.db', 
    version: 2,
    onCreate: _onCreate,
    onUpgrade: _onUpgrade,
    onDowngrade: _onDowngrade,
    );
}

Sqflite允许您在数据库上执行原始SQL

await db.execute('DROP TABLE Students');

它还可以在转义值方面帮助您,这样您就不会意外损坏数据库

await db.rawUpdate(
    'UPDATE Students Set name = ? WHERE id = ?',
    ['Bobby Tables', 42],
);

您还可以使用更高级的函数 -insert、update、delete- 来修改您的数据库

await db.insert('Students', {
    'id': 43,
    'name': 'Alice Querin',
});

使用query从其中获取数据

await db.query(
    'Students',
    distinct: truem
    columns: ['name'],
    orderBy: 'name',
);

Sqflite还支持事务和批处理,因此您的数据库操作可以更加安全和高效

await db.transaction((txn) async {
    await txn.delete(
        'BookOwnership',
        where: 'student_id = ? AND book_id = ?',
        whereArgs: [42, 1337],
    );
    await txn.insert('BookOwnership',{
        'student_id': 43,
        'book_id': 1337,
    });
});

最后,来自社区的一些建议

最好是在您的开发机器上设计您的数据库并测试您的查询,然后,才将您的SQL复制到您的项目中

如果您使用外键,则可以在打开数据库时在onConfigure中启用它们,默认情况下,外键是不被启用的

不要忘记sqflite不是您唯一的本地数据库选项

研究pub.dev看看有没有更适合您的需求的本地数据库插件 有关在应用程序中包含此功能的更多详细信息和说明,请查看pub.dev上的sqflite软件包sqflite

原文翻译自视频:视频地址