感谢您的阅读和帮助:)
我正在使用 ActiveAndroid 3.0 - Android 2.2 - 在我的应用程序中,我有一个名为“用户”的模型。最初我只创建了具有(id、名称、密码)列/属性的模型,我在模拟器上运行了该应用程序,它运行良好。
@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;
脚本可能包含任何一组 SQL 语句,这些语句可以由 SQLiteDatabase
通过 execSQL(...)
执行。 .
可以在 the wiki on the GitHub project page 中找到有关使用 Active Android 进行模式迁移的更多详细信息.
关于android - 添加新列后如何使用 activeandroid 更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17385466/