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

标签 android database android-sqlite activeandroid

感谢您的阅读和帮助:)

我正在使用 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/

相关文章:

android - 带有 CursorTreeAdapter 的 ExpandableListView 抛出 IllegalStateException

android - 如何结合 BottomAppBar + FAB 与 BottomNavigationView

android - 为什么 SQLite 文件存在但 openDatabase 出错?

Android concat 2 音频(wav 或 mp3)文件

mysql - 当字符串包含空格时应用程序不更新数据库

android - SQLiteOpenHelper 单连接与多连接

android - SQLiteOpenHelper onCreate()/onUpgrade() 何时运行?

database - 尝试使用查找在 VBA 中查找字段

sql - 如何创建更好的表结构

android - 如何检查设备上的 sqlite 数据库表?