sqlite - Windows Universal 现有应用程序向 SQLite 表添加新列
问题描述
我们在 Windows 商店中发布了一个 Windows 8.1 通用应用程序。由于需求更改,现在我们需要向现有表中添加一些字段。我们使用 SQLite for Windows Runtime (Windows 8.1) 和 SQLite for Windows Phone 8.1。现在,如果我们向现有表添加一些新字段(通过更新模型类),当现有用户更新应用程序时会导致任何问题吗?
如果我们创建一个新表而不是添加新列,那么这会导致任何问题还是会比添加新字段更安全?
解决方案
即使使用现有的 SQLite 数据库,向现有表添加新列也是非常安全的。创建新表也是如此。具体过程取决于您使用的 SQLite 库。
如果您使用 SQL 查询直接查询数据库,那么您将使用ALTER TABLE ... ADD COLUMN
查询。如果您使用类似的库,则在运行该方法sqlite-net-pcl
时会自动进行开箱即用的迁移。CreateTable
正如文件所说:
自动迁移目前只支持添加新列。如果您的类具有与表中的列无关的新属性,则将执行 alter table ... add column 命令以使数据库保持最新。这些新列将没有默认值,因此将为空。
小费
当您更改模型时,请始终针对先前版本的数据库测试更改。这可以通过两种方式完成:
- 从商店安装现有版本,启动应用程序并使用它,以便它包含一些数据,然后关闭它并转到
C:\Users\[UserName]\AppData\Local\Packages
. 在这里导航到Packages
并在那里找到您的应用程序的包文件夹。在里面去LocalState
你应该找到你的sqlite
数据库的地方。App.xaml.cs
将其复制到某处,卸载 Store 版本并启动新版本进行调试,并在构造函数中放置断点。当调试器停在那里时,将原始数据库复制回应用程序包LocalState
文件夹中的相同位置并继续调试。观察数据库是否正确迁移。 - 使用 Git 源代码管理,进入历史记录到以前的版本提交,安装应用程序进行调试,用一些数据填充数据库,关闭应用程序。现在转到最新的提交并再次启动应用程序进行调试。验证迁移工作。
推荐阅读
- c++ - 为什么 C++ 模板代码在我的 lambda 中运行得更快?
- oracle - 如何比较两个表之间的数据,其中一个表在oracle中,另一个在postgres中
- python - 如何在不使用外部库的情况下在 Python 中交换多维列表的列和行?
- java - 为什么循环没有在这里中断?
- python - TypeError:Opencv 中的自我类型不正确(必须是“StereoMatcher”或其派生词)
- python - 从oddsportal刮运动表
- python - Python 包安装问题:PyAudio 和 PortAudio
- java - Crashlytics 发送到报告端点已禁用
- python - 熊猫绘制重复的数据框问题
- python - 如何创建 Python 的 concurrent.futures.ProcessPoolExecutor.submits() 的连续流?