Как перенести существующую таблицу sqlite в ROOM Db с типами данных, такими как VCHAR, TIMESTAMP? - PullRequest
0 голосов
/ 14 мая 2018

В моей старой таблице sqlite у меня есть эти столбцы (id INTEGER PRIMARY KEY AUTOINCREMENT, api_response_json TEXT, api_req TEXT, post_params TEXT, req_type VARCHAR, отметка времени TIMESTAMP)

Теперь я пытаюсь перенести его в Room DB следующим образом: -

статическая окончательная миграция MIGRATION_1_2 = новая миграция (1, 2) {

    @Override
    public void migrate(SupportSQLiteDatabase database) {
    // Create the new table
        database.execSQL(
                "CREATE TABLE users_new (id INTEGER PRIMARY KEY AUTOINCREMENT,api_response_json TEXT, api_req TEXT,post_params TEXT,req_type VARCHAR,timestamp TIMESTAMP)");
    // Copy the data
        database.execSQL("INSERT INTO users_new (id,api_response_json, api_req,post_params,req_type,timestamp) "
                + "SELECT id,api_response_json, api_req,post_params, req_type,timestamp "
                + "FROM old_Table_name");
    // Remove the old table
        database.execSQL("DROP TABLE old_Table_name");
    // Change the table name to the correct one
        database.execSQL("ALTER TABLE users_new RENAME TO old_Table_name");}
};

Я получаю сообщение об ошибке. Миграция неправильно обработала

Ожидаемое: TableInfo {name = 'api_data', column = {timestamp = Column {name = 'timestamp', type = 'TEXT', notNull = false, primaryKeyPosition = 0}, req_type = Column {name = 'req_type', type = 'TEXT ', notNull = false, primaryKeyPosition = 0}, post_params = Column {name =' post_params ', type =' TEXT ', notNull = false, primaryKeyPosition = 0}, id = столбец {name =' id ', type =' INTEGER ', notNull = false, primaryKeyPosition = 1}, api_response_json = столбец {name =' api_response_json ', тип =' TEXT ', notNull = false, primaryKeyPosition = 0}, api_req = столбец {name =' api_req ', type =' TEXT ', notNull = false, primaryKeyPosition = 0}}, foreignKeys = [], indices = []}

Найдено: TableInfo {имя = 'api_data', столбцы = {timestamp = столбец {name = 'timestamp', type = 'TIMESTAMP', notNull = false, primaryKeyPosition = 0}, req_type = Column {name = 'req_type', type = 'VARCHAR ', notNull = false, primaryKeyPosition = 0}, post_params = Column {name =' post_params ', type =' TEXT ', notNull = false, primaryKeyPosition = 0}, id = столбец {name =' id ', type =' INTEGER ', notNull = false, primaryKeyPosition = 1}, api_response_json = столбец {name =' api_response_json ', тип =' TEXT ', notNull = false, primaryKeyPosition = 0}, api_req = столбец {name =' api_req ', type =' TEXT ', notNull = false, primaryKeyPosition = 0}}, foreignKeys = [], indices = []}

Проблема в TIMESTAMP и VARCHAR.

1 Ответ

0 голосов
/ 11 августа 2018

Да, есть проблема в TIMESTAMP и VARCHAR Вы должны изменить его на:

    static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
        // Create the new table
        database.execSQL(
                "CREATE TABLE users_new (id INTEGER PRIMARY KEY AUTOINCREMENT,api_response_json TEXT, api_req TEXT,post_params TEXT,req_type TEXT,timestamp TEXT)");
        // Copy the data
        database.execSQL("INSERT INTO users_new (id,api_response_json, api_req,post_params,req_type,timestamp) "
                + "SELECT id,api_response_json, api_req,post_params, req_type,timestamp "
                + "FROM old_Table_name");
        // Remove the old table
        database.execSQL("DROP TABLE old_Table_name");
        // Change the table name to the correct one
        database.execSQL("ALTER TABLE users_new RENAME TO old_Table_name");}
    };

ответ был внутри вашей ошибки миграции

...