gpt4 book ai didi

sqlite - 使用sqlite数据库和slite-net更改架构

转载 作者:行者123 更新时间:2023-12-03 17:43:43 25 4
gpt4 key购买 nike

我目前在Windows Phone 8.1应用程序中使用带有SQLite-NET库的SQLite数据库。我想知道是否有人在应用程序版本之间升级时如何完成表架构更改的最佳实践。

我是手动创建原始SQL语句以更新架构的唯一选择吗?

最佳答案

在此向SO社区表示感谢,我提供了用于处理模式更改的主要代码。请注意,这将处理从任何较早版本到最新版本的数据库升级(即使用户跳过了两者之间的版本)。不处理数据库降级。我可能应该多进行一些错误检查| try / catch语句。

在我的sqlite助手类中,我有以下声明:

private SQLiteConnection _db;

// Start from 1 and increment this number whenever DB schema changes are made
private const int LATEST_DATABASE_VERSION = 3;


然后我的主要升级方法是:

private void DoUpgradeDb(int oldVersion, int newVersion)
{
for (int vFrom = oldVersion; vFrom < newVersion; vFrom++)
{
switch (vFrom)
{
case 1: // Upgrade from v1 to v2
UpgradeV1AlterPersonAddColumnAge();
UpgradeV1AnotherSchemaChange();
break;
case 2: // Upgrade from v2 to v3
UpgradeV2CreateTableHobbies();
break;
default:
break;
}
}
// Save the new version number to local storage
App.AppSettingsService.SetDatabaseVersion(newVersion);
}


如您在上面看到的,我喜欢将每个版本中的各个更改放入其自己的方法中,因此可以将 UpgradeV2CreateTableHobbies()方法定义为:

    private void UpgradeV2CreateTableHobbies()
{
_db.CreateTable<Hobbies>();
}


当然,您还需要记住,从头开始创建数据库(例如,新安装)时,不仅要进行更新,还要进行相同的架构更改。

当需要下一次升级时,可以增加 LATEST_DATABASE_VERSION常数。我每次实例化Sqlite helpder类时都检查是否需要版本升级(因为我使用单例模式),因此可以执行以下操作:

    private bool UpgradeDbIfRequired()
{
bool wasUpgradeApplied = false;
// I wrote a GetDatabaseVersion helper method that reads the version (as nullable int) from local app settings.
int? currentVersion = App.AppSettingsService.GetDatabaseVersion();
if (currentVersion.HasValue && currentVersion.Value < LATEST_DATABASE_VERSION)
{
// Upgrade to latest version
DoUpgradeDb(currentVersion.Value, LATEST_DATABASE_VERSION);
wasUpgradeApplied = true;
}
else
{
// Already on latest version
return false;
}

return wasUpgradeApplied;
}

关于sqlite - 使用sqlite数据库和slite-net更改架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24963402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com