2017-12-27 188 views
2

我在我的房間數據庫添加新的實體FeedItem和寫作遷移它。不是原始類型間的數據庫遷移

問題:我有我的FeedItem類,這是不是原始類型日期類型。在這種情況下寫入遷移的正確方法是什麼?

@Entity(tableName = "FeedItem") 
public class FeedItem implements Item, Votable { 

private int id; 
@PrimaryKey(autoGenerate = true) 
@ColumnInfo(name = "feedItemRowIndex") 
private int rowIndex; 
private int toId; 
private int fromId; 
private Date date; 
... 

我的移植目前看起來像這樣。

private static final Migration MIGRATION_1_2 = new Migration(1, 2) { 
    @Override 
    public void migrate(@NonNull SupportSQLiteDatabase database) { 

     database.execSQL("CREATE TABLE FeedItem (feedItemId INTEGER, " + 
       "feedItemRowIndex INTEGER, " + 
       "feedVotes INTEGER" + 
       "feedVote INTEGER" + 
       "toId INTEGER" + 
       "fromId INTEGER" + 
       "date Date" + // i need to change this row 
       ... 
       "PRIMARY KEY (feedItemRowIndex))" 

並在這裏轉換器,日期型

public class DateConverter { 
@TypeConverter 
public static Date toDate(Long timestamp) { 
    return timestamp == null ? null : new Date(timestamp); 
} 

@TypeConverter 
public static Long toTimestamp(Date date) { 
    return date == null ? null : date.getTime(); 
} 
} 

的感謝!

+1

如果它很長,那很可能是INTEGER – EpicPandaForce

回答

0

這是很容易的。房間生成適合轉換器類型的原始類型。

所以在我的情況下,類型爲INTEGER。感謝@EpicPandaForce的評論

0

如果room.schemaLocation在您的build.gradle文件中設置,那麼您可以查看生成的模式並複製Room將用來創建表的準確SQL。 Complete example here