sqlite - Windows Universal现有应用向SQLite表添加新列

标签 sqlite uwp windows-store-apps win-universal-app

我们在Windows商店中发布了Windows 8.1通用应用程序。由于需求变更,我们现在需要向现有表中添加一些字段。我们已将SQLite用于Windows运行时(Windows 8.1)和SQLite用于Windows Phone 8.1。现在,如果我们向现有表中添加一些新字段(通过更新模型类),那么在现有用户更新应用程序时会引起任何问题吗?

如果我们创建一个新表,而不是添加新列,那会不会引起任何问题,或者会比添加新字段更安全?

最佳答案

即使使用现有的SQLite数据库,向现有表中添加新列也是绝对安全的。创建新表也是如此。具体过程取决于您所使用的SQLite库。
如果直接使用SQL查询来查询数据库,则将使用ALTER TABLE ... ADD COLUMN查询。如果您使用的是类似sqlite-net-pcl的库,则在运行CreateTable方法时,您将获得自动迁移的功能。正如documentation所说:

当前,自动迁移仅支持添加新列。如果您的类具有与表中的列不相关的新属性,则将执行alter table ... add column命令使数据库更新。这些新列将没有默认值,因此将为null。

小费
更改模型时,请始终对照数据库的先前版本测试更改。这可以通过两种方式完成:

从Store安装现有版本,启动应用程序并使用它,使其包含一些数据,然后关闭它并转到C:\Users\[UserName]\AppData\Local\Packages。在这里导航到Packages并在其中找到您应用程序的包文件夹。在内部进入LocalState,您应在其中找到您的sqlite数据库。将其复制到某处,卸载商店版本,然后启动新版本进行调试,并将断点放置在App.xaml.cs构造函数中。当调试器停在那里时,将原始数据库复制回到应用程序包LocalState文件夹中的相同位置,然后继续调试。观察数据库是否正确迁移。
使用Git源代码管理,进入历史记录以提交到先前的版本,安装应用程序进行调试,用一些数据填充数据库,然后关闭应用程序。现在转到最新提交并再次启动应用程序进行调试。验证迁移工作正常。

关于sqlite - Windows Universal现有应用向SQLite表添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52793301/

相关文章:

java - 无法在数据库android中插入

php - 使用 SQLite3 数据库的 PHP 登录脚本的问题

c# - 如何从C++ UWP App引用C#UWP类库

uwp - C++/WinRT 控制台 UWP 应用的 AppxManifest.xml 中的入口点是什么?

android - 根据我的需要选择正确的数据库

android - 在 Android 手机中存储这个小型只读数据表的最佳方法是什么?

c# - 如何在 ItemsControl 中设置从 ItemTemplate 到托管容器的绑定(bind)? (UWP)

windows-runtime - Visual Studio Express for Windows 是否可以支持 TypeScript?

memory-management - WinRT 如何处理 BitmapImage 和 Image 内存

windows-8 - 相机打开时打开设置 super 按钮会在Windows 8/WinRT中关闭相机