【发布时间】: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}
【问题讨论】: