嗨,我正在开发一个Android应用程序,其中我使用的是活动Android。我试图使用迁移将一列添加到表中。我尝试了以下代码:

ALTER TABLE TAGS ADD COLUMN TAG_DATE INTEGER;

它在当前版本上运行良好。但是我有两个旧版本的应用程序。一个A已经有标记表,另一个B没有标记表。
因此,当我试图从一个更新到当前版本时,它的工作正常。但是,当我尝试从b转换到当前版本时,在这种情况下,它首先创建一个带有tag_date列的tag model类的标记表,在这种情况下,它会在执行此脚本时给出重复的列错误。所以我想做的是检查列是否已经存在。如果不是,则更改并添加列。
在活动的android脚本中有什么方法可以做到这一点吗?需要帮助。谢谢您。

最佳答案

在oncreate application.class中

ActiveAndroid.initialize(this);
DBHelper.createIfNeedColumn(YOUR_ORM_CLASS, COLUMN_KEY);

和dbhelper.class静态类
public static boolean createIfNeedColumn(Class<? extends Model> type, String column) {
    boolean isFound = false;
    TableInfo tableInfo = new TableInfo(type);

    Collection<Field> columns = tableInfo.getFields();
    for (Field f : columns) {
        if (column.equals(f.getName())) {
            isFound = true;
            break;
        }
    }
    if (!isFound) {
        ActiveAndroid.execSQL("ALTER TABLE " + tableInfo.getTableName() + " ADD COLUMN " + column + " TEXT;");
    }
    return isFound;
}

10-04 17:16