7

我正在尝试使用 Flutter 的SQFlite 插件来了解数据库操作。在使用推荐文档中,作者说:

该 API 很大程度上受到 Android ContentProvider 的启发,其中典型的 SQLite 实现意味着在第一次请求时打开数据库并保持打开状态。

就我个人而言,我的 Flutter 应用程序中有一个全局参考数据库,以避免锁定问题。如果多次调用,打开数据库应该是安全的。

如果引用丢失(并且数据库尚未关闭),则仅在小部件中保留引用可能会导致热重载问题。

这是否意味着我创建了一个打开数据库连接的单例类(如这里),然后我从不关闭它?也就是说,我从不这样做:

await database.close();

我过去在使用 Android SQLite 时遇到过并发问题(如此所述),所以我通常使用内容提供程序来解决这个问题。但是,我只是在使用它时并没有真正了解内容提供商在幕后所做的事情。保持与数据库的单个连接是否会做同样的事情?应用退出时是否需要关闭数据库?该用户似乎认为这无关紧要。

4

1 回答 1

5

我没有关闭数据库,也没有遇到任何问题,但最好的做法是关闭所有不需要的数据库连接。

onInitState()您可以通过覆盖可以调用创建数据库的函数来初始化数据库,并通过覆盖onDispose()可以调用的位置来关闭db.close()

或者,您可以为每个查询打开/关闭连接,但这会增加额外的处理开销并且不需要它,尤其是在您进行频繁的数据库调用时。

更多详细信息可以参考这篇文章: https ://medium.com/@greg.perry/flutter-and-sqlite-f72878bc5859

于 2019-03-30T23:20:42.357 回答