【问题标题】:Android field is stored as null in column after migration迁移后,Android字段在列中存储为null
【发布时间】:2022-06-19 06:00:17
【问题描述】:

在android sqllite 数据库中迁移后,新字段存储为null,我不知道为什么。我所做的只是向 Object 类添加新字段并创建迁移方法,在其中添加新列并填充所有值。我可以在 Database Inspector 中看到新列和填充值,但是当我添加新记录时,除了新记录之外的所有字段都被存储。 对象类:

@DatabaseTable(tableName = "organizer_item")
public class OrganizerItem {

public static final String TABLE_NAME = "organizer_item";
public static final String COLUMN_ID = "id";
public static final String COLUMN_DATE = "date";
public static final String COLUMN_NOTIFICATION_DATE = "notification_date";
public static final String COLUMN_TEXT = "text";

@DatabaseField(generatedId = true, columnName = COLUMN_ID)
private int id;

@DatabaseField(columnName = COLUMN_DATE)
private long dateTime;

@DatabaseField(columnName = COLUMN_TEXT)
private String text;

@DatabaseField(columnName = COLUMN_NOTIFICATION_DATE)
private long notificationDateTime;

public OrganizerItem(){}

public OrganizerItem(long dateTime,long notificationDateTime, String text) {
    this.dateTime = dateTime;
    this.text = text;
    this.notificationDateTime = notificationDateTime;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public long getDateTime() {
    return dateTime;
}

public void setDateTime(long dateTime) {
    this.dateTime = dateTime;
}

public long getNotificationDateTime() {
    return notificationDateTime;
}

public void setNotificationDateTime(long notificationDateTime) {
    this.notificationDateTime = notificationDateTime;
}

public String getText() {
    return text;
}

public void setText(String text) {
    this.text = text;
}

}

迁移:

   private void upgrade(SQLiteDatabase db) {
    String addNotificationDateTimeQuery = ("ALTER TABLE " + OrganizerItem.TABLE_NAME + " ADD COLUMN "
            + OrganizerItem.COLUMN_NOTIFICATION_DATE + " INTEGER");
    db.execSQL(addNotificationDateTimeQuery);
    long fiveMinAsMiliseconds = 5 * 60 * 1000;
    String initAddNotificationDateTimeQuery = ("UPDATE " + OrganizerItem.TABLE_NAME + " SET "
            + OrganizerItem.COLUMN_NOTIFICATION_DATE + " =  " + OrganizerItem.COLUMN_DATE + " - " + fiveMinAsMiliseconds);
    db.execSQL(initAddNotificationDateTimeQuery);
}

数据库检查器屏幕: 我在迁移后尝试创建记录时填充了第 11-12 行。

要插入我使用的记录:

private RuntimeExceptionDao<OrganizerItem, Integer> organizerItemDao = null;

稍后填充。

然后点击按钮:

organizerItemDao.update(organizerItem);

orginizerItem 已填充所有字段。更新前的日志输出如下:

OrganizerItem{id=0, dateTime=1654717800000, text='New Stackoverflow Test', notificationDateTime=1654717500000}

来自 Database Inspector 的屏幕:

【问题讨论】:

    标签: android sqlite migration


    【解决方案1】:

    ormlite_config.txt 文件缺少配置。 它可以在路径下找到:res -> raw

    之前:

    之后:

    【讨论】:

      猜你喜欢
      • 2019-06-29
      • 2020-02-13
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      相关资源
      最近更新 更多