Я пытаюсь перенести базу данных, изменив тип столбца с типа String на Date. Вот что я сделал, что не дало ожидаемых результатов ...
public static final Migration MIGRATION_1_2 = new Migration(1, 2) {
SimpleDateFormat mDateFormat = new SimpleDateFormat("dd/MM/yyyy");
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
// Create a new table
database.execSQL("CREATE TABLE newExpense (id INTEGER NOT Null, title TEXT, amount TEXT, date INTEGER" +
", PRIMARY KEY(id))");
// Copy the contents of the old table into this new one
database.execSQL("INSERT INTO newExpense (id,title,amount,date) SELECT id,title,amount" +
", 'mDateFormat.parse(date).getTime()' AS date FROM Expense ");
// Delete the old table
database.execSQL("DROP TABLE Expense");
// Rename the new table to the old table
database.execSQL("ALTER TABLE newExpense RENAME TO Expense");
}
};
Вот как выглядела сущность раньше
// BEFORE (version 1)
@Entity
public class Expense {
@PrimaryKey(autoGenerate = true)
private int id;
private String title;
private String amount;
private String date;
...
}
А теперь
// NOW (version 2)
@Entity
public class Expense {
@PrimaryKey(autoGenerate = true)
private int id;
private String title;
private String amount;
private Date date;
...
}
Когда я смоделировал обновление на устройстве-эмуляторе, результат показал неверную дату. Я особенно не уверен в этом утверждении в миграции
database.execSQL("INSERT INTO newExpense (id,title,amount,date) SELECT id,title,amount" +
", 'mDateFormat.parse(date).getTime()' AS date FROM Expense ")
особенно 'mDateFormat.parse (date) .getTime ()'. В этом я пытался добиться того, чтобы преобразовать дату, которая раньше была представлена в виде строки в формате dd / MM / yyyy, в объект даты, используя метод синтаксического анализа SimpleDateFormat. Что может быть не так с этим подходом или как еще я могу достичь цели?