感谢您的阅读和帮助:)
我正在使用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数据库名称并更新 list 文件中的数据库版本属性。
<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()。到目前为止,这些都不起作用。
我非常感谢您的帮助。谢谢。
最佳答案
从声音上看,您缺少将user
表迁移到新架构的升级脚本。升级脚本基本上包含有关如何从数据库的旧状态转换到新状态的说明。在您的特定情况下,您将要告诉SQLite它应该在现有用户表中添加一个新列profile_image
。
要将数据库从模式1升级到2,请将AA_DB_VERSION
值提高到2
,并将升级脚本命名为2.sql
。将文件保存在assets/migrations
下,并提供以下内容:
ALTER TABLE user ADD profile_image TEXT;
脚本可以包含可以由
SQLiteDatabase
通过 execSQL(...)
执行的任何SQL语句集。可以在the wiki on the GitHub project page中找到有关使用Active Android进行架构迁移的更多详细信息。