IllegalArgumentException:版本必须 >= 1,为 0。在带有 Room 数据库的 Android Studio 中
IllegalArgumentException: Version must be >= 1, was 0. in Androis Studio with Room database
我正在尝试将我称为 QuesDto 的简单对象保存到 Room 数据库。
我检查了所有内容,但无法弄清楚为什么会出现此异常:
FATAL EXCEPTION: pool-3-thread-1
Process: ovh.lahmadi.naditutoadmin, PID: 7753
java.lang.IllegalArgumentException: Version must be >= 1, was 0
at android.database.sqlite.SQLiteOpenHelper.<init>(SQLiteOpenHelper.java:164)
.......
这是我的房间数据库摘要class:
@Database(entities = {QuesDto.class}, version = 0, exportSchema = false)
public abstract class QuizRoomDB extends RoomDatabase {
private static volatile QuizRoomDB INSTANCE;
public abstract QuizDao wordDao();
.....
public static QuizRoomDB getDatabase(Context context){
if (INSTANCE == null){
synchronized (QuizRoomDB.class){
if (INSTANCE == null){
INSTANCE = Room.databaseBuilder(context.getApplicationContext(), QuizRoomDB.class, "quiz_db")
.build();
}
}
}
return INSTANCE;
}
}
My Dao 界面:
@Dao
public interface QuizDao {
@Insert (onConflict = OnConflictStrategy.IGNORE)
void insert(QuesDto quesDto);
}
我的实体:
@Entity (tableName = "ques")
public class QuesDto {
@PrimaryKey
@NonNull
private long quesId;
private String quesHtml;
......
}
插入函数的调用方式:
public QuestionRepository(Application application) {
this.context = application.getApplicationContext();
.....
}
public void saveQuesLocally(QuesDto quesDto) {
QuizRoomDB db = QuizRoomDB.getDatabase(context);
QuizDao quizDao = db.wordDao();
Log.d(N.Room, "QuestionRepository. inside saveQuesLocally");
new Thread(() -> {
QuizRoomDB.dbWriteExecutor.execute(()-> quizDao.insert(quesDto));
}).start();
}
感谢您的帮助。
由于以下内部逻辑而发生错误:
if (version < 1) throw new IllegalArgumentException("Version must be >= 1, was " + version);
SQLiteOpenHelper 代码为:https://android.googlesource.com/platform/frameworks/base/+/74f170f9468d3cf6d7d0ef453320141a3e63571b/core/java/android/database/sqlite/SQLiteOpenHelper.java
您需要更改 class 中的版本 1
:
@Database(entities = {QuesDto.class}, version = 1, exportSchema = false)
public abstract class QuizRoomDB extends RoomDatabase {
}
改变
@Database(entities = {QuesDto.class}, version = 0, exportSchema = false)
至
@Database(entities = {QuesDto.class}, version = 1, exportSchema = false)
查看 here 了解更多详情。
我正在尝试将我称为 QuesDto 的简单对象保存到 Room 数据库。
我检查了所有内容,但无法弄清楚为什么会出现此异常:
FATAL EXCEPTION: pool-3-thread-1
Process: ovh.lahmadi.naditutoadmin, PID: 7753
java.lang.IllegalArgumentException: Version must be >= 1, was 0
at android.database.sqlite.SQLiteOpenHelper.<init>(SQLiteOpenHelper.java:164)
.......
这是我的房间数据库摘要class:
@Database(entities = {QuesDto.class}, version = 0, exportSchema = false)
public abstract class QuizRoomDB extends RoomDatabase {
private static volatile QuizRoomDB INSTANCE;
public abstract QuizDao wordDao();
.....
public static QuizRoomDB getDatabase(Context context){
if (INSTANCE == null){
synchronized (QuizRoomDB.class){
if (INSTANCE == null){
INSTANCE = Room.databaseBuilder(context.getApplicationContext(), QuizRoomDB.class, "quiz_db")
.build();
}
}
}
return INSTANCE;
}
}
My Dao 界面:
@Dao
public interface QuizDao {
@Insert (onConflict = OnConflictStrategy.IGNORE)
void insert(QuesDto quesDto);
}
我的实体:
@Entity (tableName = "ques")
public class QuesDto {
@PrimaryKey
@NonNull
private long quesId;
private String quesHtml;
......
}
插入函数的调用方式:
public QuestionRepository(Application application) {
this.context = application.getApplicationContext();
.....
}
public void saveQuesLocally(QuesDto quesDto) {
QuizRoomDB db = QuizRoomDB.getDatabase(context);
QuizDao quizDao = db.wordDao();
Log.d(N.Room, "QuestionRepository. inside saveQuesLocally");
new Thread(() -> {
QuizRoomDB.dbWriteExecutor.execute(()-> quizDao.insert(quesDto));
}).start();
}
感谢您的帮助。
由于以下内部逻辑而发生错误:
if (version < 1) throw new IllegalArgumentException("Version must be >= 1, was " + version);
SQLiteOpenHelper 代码为:https://android.googlesource.com/platform/frameworks/base/+/74f170f9468d3cf6d7d0ef453320141a3e63571b/core/java/android/database/sqlite/SQLiteOpenHelper.java
您需要更改 class 中的版本 1
:
@Database(entities = {QuesDto.class}, version = 1, exportSchema = false)
public abstract class QuizRoomDB extends RoomDatabase {
}
改变
@Database(entities = {QuesDto.class}, version = 0, exportSchema = false)
至
@Database(entities = {QuesDto.class}, version = 1, exportSchema = false)
查看 here 了解更多详情。