我有一个使用 DB Browser 创建的 SQLite 数据库,我把它放在资产文件中,然后我使用 SQLiteAssetHelper 来访问它。为什么如果我使用数据库浏览器更新任何记录它不会在我的应用程序中改变?!
此外,如果我在我的应用程序中执行插入查询,新记录不会出现在数据库浏览器中。
问问题
3220 次
2 回答
1
您正在处理 3 个不同的数据库:
您使用 DB Browser 创建的数据库并存储在您电脑的文件夹中。
文件夹中的数据库
assets
是您使用 DB Browser 创建的数据库的副本第一次运行应用程序时创建的模拟器/设备中的数据库。
最后一个数据库最初是您在assets
文件夹中拥有的数据库的副本。
在案例 1 中对数据库进行更改时,这些更改不会反映到assets
文件夹或模拟器/设备中的数据库。
如果您希望对您的模拟器/设备数据库进行这些更改,您必须:
- 从中删除数据库
assets
并将更改的 DB Browser 数据库复制到那里。 - 从模拟器/设备中卸载应用程序,以便删除数据库。
- 再次运行应用程序,以便在模拟器/设备中重新创建数据库。
当您对模拟器/设备进行更改并希望使用 DB Browser 检查数据库时:
- 在 Android Studio 中选择View > Tool Windows > Device File Explorer
- 在设备文件资源管理器窗口中,转到data/data/yourpackagename/databases文件夹并右键单击您的数据库,然后单击另存为...。选择要保存数据库的文件夹,然后就完成了。
现在您可以使用 DB Browser 打开数据库。
于 2018-12-10T14:31:24.027 回答
0
因为SQLiteAssetHelper
如果数据库文件已存在于目标位置,则不会从资产中复制数据库。
如果它是数据库中的开发时更改,您可以简单地卸载您的应用程序以删除旧版本的数据库。
如果是对应用程序发布版本的更改,则需要按照自述文件中的说明实现数据库版本控制和更新脚本。
此外,如果我在我的应用程序中执行插入查询,新记录不会出现在数据库浏览器中。
您插入的不是同一个数据库,而是它的副本。您需要从设备中提取数据库并从那里检查。参见例如android adb,使用 run-as 检索数据库
于 2018-12-10T14:07:17.653 回答