[英]Not closing the database with Flutter's SQFlite?
我正在尝试使用Flutter的SQFlite插件来了解数据库操作。 在使用建议文档中 ,作者说:
该API主要受Android ContentProvider的启发,在Android ContentProvider中,典型的SQLite实现意味着在第一次请求时打开数据库并保持打开状态。
我个人在Flutter应用程序中有一个全局参考数据库,以避免锁定问题。 如果多次调用,打开数据库应该是安全的。
如果引用丢失(并且数据库尚未关闭),则仅在小部件中保留引用会导致热重装问题。
这是否意味着我创建了一个单例类(如here ),该类打开了数据库连接,却再也没有关闭它? 也就是说,我从不这样做:
await database.close();
我碰到使用Android的SQLite过去的并发问题(如描述在这里 ),所以我通常使用的内容提供商要解决这个问题。 但是,我只是在使用它的时候并没有真正了解内容提供商在幕后所做的事情。 保持与数据库的单个连接是否会做同样的事情? 应用退出时是否需要关闭数据库? 该用户似乎认为没关系。
我没有关闭数据库,也没有遇到任何问题,但是关闭所有不需要的数据库连接始终是最佳实践。
您可以通过覆盖onInitState()
来初始化数据库,在该处您可以调用函数来创建数据库,而通过覆盖onDispose()
关闭数据库,您可以在其中调用db.close()
另外,您可以为每个查询打开/关闭连接,但这会增加额外的处理开销,并且不需要它,尤其是在您频繁进行数据库调用的情况下。
有关更多详细信息,请参阅以下文章: https : //medium.com/@greg.perry/flutter-and-sqlite-f72878bc5859
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.