情况:
我当前正在调试其前身的代码,该代码处理sqlite数据库(.db3文件格式)。 在软件中,您可以加载一个或多个数据库。这些数据库上的常规信息(获取所有表名,获取所有列名等)直接从文件中处理,但是对于实际数据信息,数据库被复制到内存数据库中,从中查询数据。 因此,在收集了初始信息并将所有数据保存到内存数据库之后,不再使用实际的文件。
但是,如果用户从列表中添加/删除数据库,它们仍将显示在GUI上并被引用。
问题:
所有这些都会导致以下问题:如果用户修改/删除了已加载数据库的文件(这是可能的,因为我们没有与文件的开放连接),则软件的内部数据库池与实际文件列表不同。结果,在这种情况下,一旦使用的数据库列表被更新,我们就具有不确定的行为。
可能的解决方案(?)
问题: 还有其他解决方法/建议吗?对我而言,最好/最简单的方法是找到一种方法来防止文件列表被修改。到目前为止,我还没有找到一种适合该方法的好的解决方案。
答案 0 :(得分:0)
保持对SQLite数据库文件的连接打开将阻止Windows删除它。
一个糟糕但快速的解决方案是允许原始代码将文件读取到内存,然后获取与文件的新连接。您可以保持此连接打开而无需执行任何操作,以防止其被删除。应用程序的用户使用完该数据集后,就可以处置该连接,从而允许再次删除该文件。
我会不建议这样做-这是一个肮脏的解决方法。但是,它可能会给您更多时间来适当地重构代码。