我有一个正在使用的应用程序SQLite
数据库,我正在尝试替换AndroidSQLite
with Android Room API.
我已经创建了 DAO 类、实体类和 DB,但是在执行数据库查询时Async
任务我收到以下错误:
引起原因:java.lang.IllegalStateException:从 3 到 1 的迁移
是必要的。请在构建器中提供迁移或致电
构建器中的fallbackToDestructiveMigration 在这种情况下 Room 将
重新创建所有表。
在 android.arch.persistence.room.RoomOpenHelper.onUpgrade(RoomOpenHelper.java:82)
在 android.arch.persistence.room.RoomOpenHelper.onDowngrade(RoomOpenHelper.java:94)
在 android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onDowngrade(FrameworkSQLiteOpenHelper.java:128)
在 android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:254)
在 android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
在 android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:93)
在 android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:54)
在 android.arch.persistence.room.RoomDatabase.query(RoomDatabase.java:193)
在 com.rasfi.ai.domain.room.RecordingDAO_Impl.getAll(RecordingDAO_Impl.java:112)
在 com.rasfi.ai.ui.acivities.HomeActivity$1.doInBackground(HomeActivity.java:106)
在 com.rasfi.ai.ui.acivities.HomeActivity$1.doInBackground(HomeActivity.java:102)
在 android.os.AsyncTask$2.call(AsyncTask.java:304)
在 java.util.concurrent.FutureTask.run(FutureTask.java:237)
在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
在 java.lang.Thread.run(Thread.java:760) 01-10 08:13:37.648
30267-30339/com.rasfi.ai E/UncaughtException:
java.lang.RuntimeException:执行时发生错误
doInBackground()
在 android.os.AsyncTask$3.done(AsyncTask.java:318)
在
java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
在 java.util.concurrent.FutureTask.setException(FutureTask.java:223)
在 java.util.concurrent.FutureTask.run(FutureTask.java:242)
在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
在
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
在
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
我无法理解我所缺少的内容,任何帮助将不胜感激。
您正在尝试从 SQLite 数据库版本 3 迁移到 Room 数据库版本 1。当然,ROOM 使用相同的数据库和版本控制(它只是 SQLite 上的抽象层),您的房间不知道如何管理从版本 3 到版本 1 。
您应该将 Room 中的版本增加到 4 并指定空迁移:
static final Migration MIGRATION_3_4 = new Migration(3, 4) {
@Override
public void migrate(SupportSQLiteDatabase database) {
// Since we didn't alter the table, there's nothing else to do here.
}
};
将其添加到房间:
database = Room.databaseBuilder(context.getApplicationContext(),
UsersDatabase.class, "Sample.db")
.addMigrations(MIGRATION_3_4)
.build();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)