如何在添加新列后使用activeandroid更新表

谢谢你的阅读和帮助:)

我正在使用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().到目前为止,这些都没有奏效.

我非常感谢任何帮助.谢谢.

解决方法

从它的声音来看,您缺少升级脚本以将用户表迁移到新架构.升级脚本基本上包含有关如何从数据库的旧状态到新数据库的说明.在您的特定情况下,您将要告诉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.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...