不使用 Flutter 的 SQFlite 关闭数据库?

Sur*_*gch 6 sqlite flutter sqflite

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

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

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

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

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

await database.close();
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*emi 7

我没有关闭数据库,也没有遇到任何问题,但是关闭所有不需要的数据库连接始终是最佳实践。

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

或者,您可以为每个查询打开/关闭连接,但这会增加额外的处理开销,并且没有必要,特别是当您频繁进行数据库调用时。

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