感谢您阅读和帮助:)
我正在使用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()。到目前为止,这些都没有奏效。
我非常感谢任何帮助。感谢。
答案 0 :(得分:20)
从它的声音来看,您缺少升级脚本以将user
表迁移到新架构。升级脚本基本上包含有关如何从旧数据库状态到新数据库的说明。在您的特定情况下,您需要告诉SQLite它应该向现有用户表添加新列profile_image
。
要将数据库从架构1升级到2,请将AA_DB_VERSION
值提升为2
,并将升级脚本命名为2.sql
。将文件保存在assets/migrations
下,并为其提供以下内容:
ALTER TABLE user ADD profile_image TEXT;
脚本可能包含SQLiteDatabase
到execSQL(...)
可以执行的任何一组SQL语句。
有关使用Active Android进行架构迁移的更多详细信息,请参阅the wiki on the GitHub project page。
答案 1 :(得分:1)
&#34; TEXT
&#34;标签已更改为&#34; VARCHAR
&#34;使用ActiveAndroid
除&#34; TEXT
&#34;外,所有其他保留字都被突出显示。我使用&#34; VARCHAR
&#34;它起作用了。