Ошибка базы данных комнат: миграция выполнена неправильно

Я хочу использовать библиотеку Room для своего приложения базы данных. Я хочу открыть базу данных из папки с ресурсами и получить все строки.

Я использовал этот способ для открытой базы данных: https://github.com/humazed/RoomAsset.

Ошибка :

    java.lang.IllegalStateException: Migration didn't properly handle quiz(com.example.user.testroomlibrary3.Quiz).
 Expected:
TableInfo{name='quiz', columns={quiz_date=Column{name='quiz_date', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, class_id=Column{name='class_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1}, quiz_name=Column{name='quiz_name', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}}, foreignKeys=[], indices=[]}
 Found:
TableInfo{name='quiz', columns={class_id=Column{name='class_id', type='int', affinity='3', notNull=false, primaryKeyPosition=1}, quiz_date=Column{name='quiz_date', type='date', affinity='1', notNull=false, primaryKeyPosition=0}, quiz_name=Column{name='quiz_name', type='nvarchar(50)', affinity='2', notNull=false, primaryKeyPosition=0}}, foreignKeys=[], indices=[]}

Мой код:

Главный :

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final AppDatabase db = AppDatabase.getAppDatabase(MainActivity.this);

    new Thread(new Runnable() {
        @Override
        public void run() {
            List<Quiz> quizList = db.quizDao().getAll();
            Log.d("Main", "list = " + quizList);
        }
    }).start();
}

Контрольный опрос :

@Entity(tableName = "quiz")
public class Quiz {

    @PrimaryKey
    @ColumnInfo(name = "class_id")
    private int id;

    @ColumnInfo(name = "quiz_name")
    private String name;

    @ColumnInfo(name = "quiz_date")
    private String date;
}

QuizDao :

@Dao
public interface QuizDao {
    @Query("SELECT * FROM quiz")
    List<Quiz> getAll();
}

База данных приложений:

public abstract class AppDatabase extends RoomDatabase {

private static AppDatabase INSTANCE;

public abstract QuizDao quizDao();

public static AppDatabase getAppDatabase(Context context)
{
    if(INSTANCE == null)
    {
        INSTANCE = RoomAsset.databaseBuilder(context.getApplicationContext() ,
                AppDatabase.class , "TEST.db").build();
    }
    return INSTANCE;
}
}

Запрос таблицы:

CREATE TABLE quiz(
    class_id int primary key,
    quiz_name nvarchar(50) ,
    quiz_date date);

person Nima Khalili    schedule 25.07.2019    source источник
comment
вы можете опубликовать код создания таблицы   -  person sasikumar    schedule 25.07.2019
comment
Да, вы можете видеть сейчас.   -  person Nima Khalili    schedule 25.07.2019
comment
опубликуйте свои данные вставки в метод базы данных   -  person sasikumar    schedule 25.07.2019
comment
Я не вставляю никаких данных. Я хочу получить данные из базы данных.   -  person Nima Khalili    schedule 25.07.2019
comment
проблема в том, что вы неправильно поддерживаете порядок столбцов.   -  person sasikumar    schedule 25.07.2019
comment
Проблема заключалась в запросе таблицы. Спасибо.   -  person Nima Khalili    schedule 25.07.2019


Ответы (2)


Проблема в том, что Room ожидает, что столбцы в таблице будут иметь определенные типы столбцов.

Это либо INTEGER, TEXT, BLOB, либо REAL (используемый тип зависит от типа java, определенного в Entity для столбца).

Таким образом, сказав, что он ожидал: -

quiz_name=Column{name='quiz_name', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}

но нашел :-

quiz_name=Column{name='quiz_name', type='nvarchar(50)', affinity='2', notNull=false, primaryKeyPosition=0}

Он говорит, что вместо nvarchar(50) ожидается использование TEXT.

Таким образом, вам необходимо преобразовать таблицу, скопированную в папку ресурсов, для использования определения столбца:

quiz_name TEXT 
person MikeT    schedule 25.07.2019

Проблема заключалась в запросе таблицы. В соответствии с использованием базы данных Room необходимо отредактировать запрос таблицы. После редактирования запроса приложение запускается без проблем

Редактировать запрос таблицы:

CREATE TABLE quiz(
    class_id INTEGER primary key not null,
    quiz_name TEXT ,
    quiz_date TEXT)
person Nima Khalili    schedule 25.07.2019