【问题标题】:Update Existing database table with new column not working in active android使用新列更新现有数据库表在活动 android 中不起作用
【发布时间】:2015-10-20 14:45:45
【问题描述】:

我在第一个版本的数据库中有以下模型:

@Table(name = DBConstants.TABLE_CHATS)
public class Chat extends Model {

    @Column(name = DBConstants.COLUMN_CHATS_CHAT_ID,unique = true,onUniqueConflict = Column.ConflictAction.REPLACE)
    public String chatId;

    @Column(name = DBConstants.COLUMN_CHATS_CHAT_MESSAGE)
    public String chatMessage;

    @Column(name = DBConstants.COLUMN_CHATS_SENDER_NAME)
    public String chatSenderName;

    @Column(name = DBConstants.COLUMN_JOBS_JOB_ID)
    public String chatJobId;

    public Chat(){super();}

    public Chat(String chatId, String chatMessage, String chatSenderName, String chatJobId){
        super();
        this.chatId = chatId;
        this.chatMessage = chatMessage;
        this.chatSenderName =chatSenderName;
        this.chatJobId = chatJobId;
    }

    public static List<Chat> getChats(String jobId) {
        return new Select()
                .from(Chat.class)
                .where("jobId=?",jobId)
                .execute();
    }
}

现在我想用新列更新上述模型,所以我用新列更新了模型类,如下所示。

@Table(name = DBConstants.TABLE_CHATS)
public class Chat extends Model {

    @Column(name = DBConstants.COLUMN_CHATS_CHAT_ID,unique = true,onUniqueConflict = Column.ConflictAction.REPLACE)
    public String chatId;

    @Column(name = DBConstants.COLUMN_CHATS_CHAT_MESSAGE)
    public String chatMessage;

    @Column(name = DBConstants.COLUMN_CHATS_SENDER_NAME)
    public String chatSenderName;

    @Column(name = DBConstants.COLUMN_JOBS_JOB_ID)
    public String chatJobId;

    @Column(name = "extra_column")
    public String extraColumn;

    public Chat(){super();}

    public Chat(String chatId, String chatMessage, String chatSenderName, String chatJobId,String extraColumn){
        super();
        this.chatId = chatId;
        this.chatMessage = chatMessage;
        this.chatSenderName =chatSenderName;
        this.chatJobId = chatJobId;
        this.extraColumn = extraColumn;
    }

    public static List<Chat> getChats(String jobId) {
        return new Select()
                .from(Chat.class)
                .where("jobId=?",jobId)
                .execute();
    }
}

我正在使用 Active android 作为数据库,所以我完成了以下步骤:

1.更新清单文件中的数据库版本号

<meta-data android:name="GC_DB_VERSION" android:value="4" />

2.assets/migrations中添加4.sql脚本文件

3.在其中添加了更新查询。

ALTER TABLE chat ADD COLUMN extra_column TEXT;
  1. 现在,当我尝试将新列值插入数据库时​​,出现以下错误:

android.database.sqlite.SQLiteException:表聊天没有列 命名为 extra_column (code 1): ,编译时:INSERT INTO 聊天(chat_message,Id,extra_column,chat_sender_name,jobId,chatId) 值 (?,?,?,?,?,?) 10-16 06:54:29.712 16791-16791/com.example.manikanta.navigationdrawerpattern E/SQLite 数据库:在 android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native 方法) 10-16 06:54:29.712 16791-16791/com.example.manikanta.navigationdrawerpattern E/SQLite 数据库:在 android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882) 10-16 06:54:29.712 16791-16791/com.example.manikanta.navigationdrawerpattern E/SQLite 数据库:在 android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493) 10-16 06:54:29.712 16791-16791/com.example.manikanta.navigationdrawerpattern E/SQLite 数据库:在 android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 10-16 06:54:29.712 16791-16791/com.example.manikanta.navigationdrawerpattern ………… 10-16 06:54:29.712 16791-16791/com.example.manikanta.navigationdrawerpattern E/SQLiteLog: (1) 聊天桌没有名为extra_column的列

谁能解释一下如何解决这个问题?

【问题讨论】:

  • DBConstants.TABLE_CHATS = "chat"?

标签: android sqlite activeandroid


【解决方案1】:

我已经解决了。

问题原因:

在更改清单文件中的版本号时,未调用活动 android 的迁移脚本

解决方法:

我已经通过 Application.class 手动设置数据库版本通过以下行进行更改:

Configuration configuration = new Configuration.Builder(this).setDatabaseVersion(13).create();

        ActiveAndroid.initialize(configuration);

我不知道这是否是正确的做法,任何更好的方法表示赞赏。

【讨论】:

    猜你喜欢
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多