我正在尝试使用SQFlite plugin for Flutter了解数据库操作。作者在usage recommendation docs中说:
API的主要灵感来自Android ContentProvider,其中 典型的SQLite实现意味着在数据库上一次打开数据库 第一个请求并保持打开状态。
我个人的Flutter中有一个全局参考数据库 应用程序以避免锁定问题。打开数据库应该是安全的 如果被多次调用。
仅在小部件中保留引用会导致热重装问题 如果引用丢失(并且数据库尚未关闭)。
这是否表示我创建了一个单例类(例如here),该类打开了数据库连接,然后再也没有关闭它?也就是说,我从不这样做:
await database.close();
过去,我在使用Android SQLite时遇到了并发问题(如here所述),因此我通常使用内容提供商来解决此问题。但是,我只是在使用它的时候并没有真正了解内容提供商在幕后所做的事情。保持与数据库的单个连接是否会做同样的事情?应用退出时是否需要关闭数据库? This user似乎认为没关系。
答案 0 :(得分:1)
我没有关闭数据库,也没有遇到任何问题,但是关闭所有不需要的数据库连接始终是最佳实践。
您可以通过覆盖onInitState()
来初始化数据库,在其中您可以调用函数来创建数据库,并通过覆盖onDispose()
来关闭您可以在其中调用db.close()
或者,您可以为每个查询打开/关闭连接,但这会增加额外的处理开销,并且不需要它,尤其是在您频繁进行数据库调用的情况下。
有关更多详细信息,请参阅以下文章: https://medium.com/@greg.perry/flutter-and-sqlite-f72878bc5859