gpt4 book ai didi

android - greenDao 架构升级

转载 作者:IT老高 更新时间:2023-10-28 22:05:35 26 4
gpt4 key购买 nike

我看到另一个关于使用 green dao (here) 进行架构升级/迁移的问题

该答案中有很多链接可以在进行架构升级时使用一个好的模式 - 但是没有示例说明您对数据实际执行的操作以正确迁移它,而且我找不到任何东西。

就我而言,我的迁移非常简单 - 我不希望转换任何现有数据,我只需要向我的架构中添加一些新表,我怀疑这是一种相当常见的情况。

在不删除用户已经保存的数据的情况下,将新表添加到架构中的最简单方法是什么?一个具体的例子将不胜感激。

如果 greenDao 提供了一个类似于 DevOpenHelper 的类,该类将简单地添加以前不存在于架构中的新表/列,而不首先删除现有的表/数据,那就太棒了。

最佳答案

我终于有时间自己深入研究这一点,并意识到添加新表并在旧表中保留数据非常容易。

免责声明:虽然我意识到此实现特定于我的场景,但我认为它对像我这样专门使用 Android ORM 工具 (greenDao) 来处理 Android 上的 SQLite 的人很有帮助。我知道这对于那些从一开始就编写自己的表创建查询的人来说是很常见的,但是对于那些没有在 Android 中使用 SQLite DB 的胆量的人来说,我认为这个示例会有所帮助。

回答:您可以修改 DevOpenHelper 内部类或创建自己的类。我暂时选择编辑 DevOpenHelper 以保持我的示例简单 - 但是,请注意,如果您重新生成 greendao 类,DevOpenHelper 将被覆盖。最好创建自己的类,例如“MyOpenHelper”并使用它。

在我进行更改之前,DevOpenHelper.onUpgrade 看起来像这样:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
dropAllTables(db, true);
onCreate(db);
}

不要删除所有表,而是看一下 GreenDao 自动生成的 createAllTables 方法。

重写 onUpgrade 以检查“oldVersion”是否是您要升级的版本,然后只为"new"表调用 createTable 方法。这是我的 onUpgrade 方法现在的样子:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{
Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " +

//Going from older schema to new schema
if(oldVersion == 3 && newVersion == 4)
{
boolean ifNotExists = false;

//Leave old tables alone and only create ones that didn't exist
//in the previous schema
NewTable1Dao.createTable(db, ifNotExists);
NewTable2Dao.createTable(db, ifNotExists);
NewTable3Dao.createTable(db, ifNotExists);
NewTable4Dao.createTable(db, ifNotExists);
}
else
{
dropAllTables(db, true);
onCreate(db);
}
}

添加新列与此类似,但您必须编写一些 SQL 或查看 greenDao 自动生成的 SQL 创建语句并利用这些语句。

要将单个新列(NEW_COLUMN,假设它是 INTEGER 类型)添加到现有表 (EXISTING_TABLE),请执行以下操作:

db.execSQL("ALTER TABLE 'EXISTING_TABLE' ADD 'NEW_COLUMN' INTEGER");

现在对我来说,我需要做的就是添加新表格,所以这最终变得相当简单。希望其他人觉得这很有用。

关于android - greenDao 架构升级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16154113/

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