Room database error : IllegalStateException on Migration
Room database error : IllegalStateException on Migration
我将 Room 持久性库用于我的数据库应用程序。我已经编写了一个迁移策略来 添加一个新的 table 到现有的数据库。我遇到以下错误。
错误:
java.lang.IllegalStateException: Migration didn't properly handle: table_audio_book(com.ridmik.app.audio_book.model.AudioBookInDb).
Expected:
TableInfo{name='table_audio_book', columns={book_path=Column{name='book_path', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, stream=Column{name='stream', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, user_id=Column{name='user_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, audio_book_data=Column{name='audio_book_data', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, audio_book_id=Column{name='audio_book_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, audio_book_name=Column{name='audio_book_name', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, stream_path=Column{name='stream_path', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, table_audio_book_row_id=Column{name='table_audio_book_row_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, last_closing_time=Column{name='last_closing_time', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
Found:
TableInfo{name='table_audio_book', columns={user_id=Column{name='user_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, audio_book_chapter_name=Column{name='audio_book_chapter_name', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, audio_book_data=Column{name='audio_book_data', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, audio_book_id=Column{name='audio_book_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, audio_book_name=Column{name='audio_book_name', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, row_id=Column{name='row_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, last_closing_time=Column{name='last_closing_time', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
我的模型Class:
@Entity(tableName = "table_audio_book")
data class AudioBookInDb (
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "table_audio_book_row_id")
val rowId: Long,
@ColumnInfo(name = "audio_book_id")
val bookId: Int,
@ColumnInfo(name = "audio_book_name")
val bookName: String,
@ColumnInfo(name = "stream_path")
val streamPath: String,
@ColumnInfo(name = "book_path")
val bookPath: String,
@ColumnInfo(name = "stream")
val stream: Boolean,
@ColumnInfo(name = "audio_book_data")
val audioBookData: String,
@ColumnInfo(name = "user_id")
val userId: Int,
@ColumnInfo(name = "last_closing_time")
val lastClosingTime: Long
)
我的迁移代码段:
public static final Migration MIGRATION_6_7 = new Migration(6, 7) {
@Override
public void migrate(SupportSQLiteDatabase database) {
String createTableAudioBook = "CREATE TABLE IF NOT EXISTS `table_audio_book` (`table_audio_book_row_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," +
" `audio_book_id` INTEGER NOT NULL, `audio_book_name` TEXT, `book_path` TEXT, `stream_path` TEXT, `stream` INTEGER NOT NULL, `audio_book_data` TEXT," +
" `user_id` INTEGER NOT NULL, `last_closing_time` INTEGER NOT NULL)";
database.execSQL(createTableAudioBook);
Timber.d("Upgrading Database from version 6 to 7");
}
};
谁能告诉我如何解决这个问题?
正如@BobSnyder 所说,我已经通过先删除 table 并重新创建 table 来解决它。它就像一个魅力。所以我把他的评论作为答案,以防将来有人需要它。
我将 Room 持久性库用于我的数据库应用程序。我已经编写了一个迁移策略来 添加一个新的 table 到现有的数据库。我遇到以下错误。
错误:
java.lang.IllegalStateException: Migration didn't properly handle: table_audio_book(com.ridmik.app.audio_book.model.AudioBookInDb).
Expected:
TableInfo{name='table_audio_book', columns={book_path=Column{name='book_path', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, stream=Column{name='stream', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, user_id=Column{name='user_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, audio_book_data=Column{name='audio_book_data', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, audio_book_id=Column{name='audio_book_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, audio_book_name=Column{name='audio_book_name', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, stream_path=Column{name='stream_path', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, table_audio_book_row_id=Column{name='table_audio_book_row_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, last_closing_time=Column{name='last_closing_time', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
Found:
TableInfo{name='table_audio_book', columns={user_id=Column{name='user_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, audio_book_chapter_name=Column{name='audio_book_chapter_name', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, audio_book_data=Column{name='audio_book_data', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, audio_book_id=Column{name='audio_book_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, audio_book_name=Column{name='audio_book_name', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, row_id=Column{name='row_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, last_closing_time=Column{name='last_closing_time', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
我的模型Class:
@Entity(tableName = "table_audio_book")
data class AudioBookInDb (
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "table_audio_book_row_id")
val rowId: Long,
@ColumnInfo(name = "audio_book_id")
val bookId: Int,
@ColumnInfo(name = "audio_book_name")
val bookName: String,
@ColumnInfo(name = "stream_path")
val streamPath: String,
@ColumnInfo(name = "book_path")
val bookPath: String,
@ColumnInfo(name = "stream")
val stream: Boolean,
@ColumnInfo(name = "audio_book_data")
val audioBookData: String,
@ColumnInfo(name = "user_id")
val userId: Int,
@ColumnInfo(name = "last_closing_time")
val lastClosingTime: Long
)
我的迁移代码段:
public static final Migration MIGRATION_6_7 = new Migration(6, 7) {
@Override
public void migrate(SupportSQLiteDatabase database) {
String createTableAudioBook = "CREATE TABLE IF NOT EXISTS `table_audio_book` (`table_audio_book_row_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," +
" `audio_book_id` INTEGER NOT NULL, `audio_book_name` TEXT, `book_path` TEXT, `stream_path` TEXT, `stream` INTEGER NOT NULL, `audio_book_data` TEXT," +
" `user_id` INTEGER NOT NULL, `last_closing_time` INTEGER NOT NULL)";
database.execSQL(createTableAudioBook);
Timber.d("Upgrading Database from version 6 to 7");
}
};
谁能告诉我如何解决这个问题?
正如@BobSnyder 所说,我已经通过先删除 table 并重新创建 table 来解决它。它就像一个魅力。所以我把他的评论作为答案,以防将来有人需要它。