简体   繁体   English

IllegalArgumentException:版本必须 >= 1,为 0。在带有 Room 数据库的 Androis Studio 中

[英]IllegalArgumentException: Version must be >= 1, was 0. in Androis Studio with Room database

I'm trying to persist a simple object that II call QuesDto to a Room database.我正在尝试持久化一个简单的 object,II 调用 QuesDto 到 Room 数据库。

I checked everything but couldn't figure out why I'm getting this exception:我检查了所有内容,但无法弄清楚为什么会出现此异常:

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)
        .......

Here is my Room Database abstract class:这是我的房间数据库摘要 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 interface:我的道界面:

@Dao
public interface QuizDao {
    @Insert (onConflict = OnConflictStrategy.IGNORE)
    void insert(QuesDto quesDto);
}

My Entity:我的实体:

@Entity (tableName = "ques")
public class QuesDto {
    @PrimaryKey
    @NonNull
    private long quesId;
    private String quesHtml;
    ......
}

How I call the insert function:我如何调用插入 function:

    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();
    }

Thanks for your help.谢谢你的帮助。

The error is happening due to this internal logic:由于以下内部逻辑而发生错误:

 if (version < 1) throw new IllegalArgumentException("Version must be >= 1, was " + version);

The SQLiteOpenHelper code is: https://android.googlesource.com/platform/frameworks/base/+/74f170f9468d3cf6d7d0ef453320141a3e63571b/core/java/android/database/sqlite/SQLiteOpenHelper.java The SQLiteOpenHelper code is: https://android.googlesource.com/platform/frameworks/base/+/74f170f9468d3cf6d7d0ef453320141a3e63571b/core/java/android/database/sqlite/SQLiteOpenHelper.java

You will need to change the version 1 in your class:您需要更改 class 中的版本1

@Database(entities = {QuesDto.class}, version = 1, exportSchema = false)
public abstract class QuizRoomDB extends RoomDatabase {

}

Change改变

@Database(entities = {QuesDto.class}, version = 0, exportSchema = false)

To

@Database(entities = {QuesDto.class}, version = 1, exportSchema = false)

Check here for more details. 在这里查看更多详情。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM