7

感谢您的阅读和帮助:)

我正在使用 ActiveAndroid 3.0 - Android 2.2 - 在我的应用程序中,我有一个名为“用户”的模型。最初我只使用(id,name,passcode)列/属性创建模型,我在模拟器上运行了应用程序,它工作了。

@Table(name = "user")
public class User extends Model {
  @Column (name = "name")  
  public String name;
  @Column (name = "pass_code")
  public String passCode;
}

然后我添加了一个新的列/属性 - profileImage。我在模拟器上运行了应用程序,我得到了 SQLite 列 profileImage 不存在错误。

@Table(name = "user")
public class User extends Model {
  @Column (name = "name")  
  public String name;
  @Column (name = "pass_code")
  public String passCode;
  @Column (name = "profile_image")
  public String profileImage;
}

我尝试更改 ActiveAndroid 数据库名称并更新清单文件中的数据库版本属性。

<meta-data android:name="AA_DB_NAME" android:value="my_app.db" />
<meta-data android:name="AA_DB_VERSION" android:value="2" />

但我不断收到该列不存在错误。

ERROR   AndroidRuntime  Caused by: android.database.sqlite.SQLiteException: 
no such column: profile_image: , while compiling: SELECT * FROM user WHERE profile_image = ?

我也尝试过,从模拟器中卸载应用程序,重新启动模拟器,调用 ActiveAndroid.cacheClear()。到目前为止,这些都没有奏效。

我真的很感激任何帮助。谢谢。

4

2 回答 2

22

从它的声音来看,您缺少将user表迁移到新架构的升级脚本。升级脚本基本上包含有关如何从数据库的旧状态到新状态的说明。在您的特定情况下,您需要告诉 SQLite 它应该profile_image向现有用户表添加一个新列 , 。

要将数据库从模式 1 升级到 2,请将AA_DB_VERSION值提高到2并将升级脚本命名为2.sql。将文件保存在下assets/migrations并为其提供以下内容:

ALTER TABLE user ADD profile_image TEXT;

这些脚本可能包含任何可以由SQLiteDatabasethrough执行的 SQL 语句集execSQL(...)

有关使用 Active Android 进行模式迁移的更多详细信息,可以在GitHub 项目页面上的 wiki 中找到

于 2013-06-30T01:14:54.000 回答
1

TEXT”标签更改为“ VARCHAR”用于数据库迁移使用ActiveAndroid

除“ TEXT”外,所有其他保留字均突出显示。我用了“ VARCHAR”,它奏效了。

于 2017-02-19T20:36:27.483 回答