我正在尝试使用 Flutter 的SQFlite 插件来了解数据库操作。在使用推荐文档中,作者说:
该 API 很大程度上受到 Android ContentProvider 的启发,其中典型的 SQLite 实现意味着在第一次请求时打开数据库并保持打开状态。
就我个人而言,我的 Flutter 应用程序中有一个全局参考数据库,以避免锁定问题。如果多次调用,打开数据库应该是安全的。
如果引用丢失(并且数据库尚未关闭),则仅在小部件中保留引用可能会导致热重载问题。
这是否意味着我创建了一个打开数据库连接的单例类(如这里),然后我从不关闭它?也就是说,我从不这样做:
await database.close();
我过去在使用 Android SQLite 时遇到过并发问题(如此处所述),所以我通常使用内容提供程序来解决这个问题。但是,我只是在使用它时并没有真正了解内容提供商在幕后所做的事情。保持与数据库的单个连接是否会做同样的事情?应用退出时是否需要关闭数据库?该用户似乎认为这无关紧要。