Создать объект комнаты для таблицы, которая имеет поле с типом данных LONG в Sqlite - PullRequest
0 голосов
/ 04 января 2019

База данных приложения содержит Элементы Таблица с столбцом Цена с типом данных Длинный .Версия БД = 1

CREATE TABLE items (_id INTEGER PRIMARY KEY AUTOINCREMENT,item_id 
INTEGER,title TEXT,price LONG, UNIQUE (item_id) ON CONFLICT IGNORE)

При попытке перейти в Комнату у меня возникла следующая проблема

java.lang.IllegalStateException: Migration didn't properly handle items(moka.pos.test.data.entity.Item).

Expected : price=Column{name='price', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0}
Found : price=Column{name='price', type='LONG', affinity='1', notNull=false, primaryKeyPosition=0}

Вот мой класс сущностей для Item

@Entity(tableName = "items")
public class Item {

@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "_id")
private Integer _ID;

@ColumnInfo(name = "item_id")
private Integer id;

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

@ColumnInfo(name = "price")
private Long price;

public Integer get_ID() {
    return _ID;
}

public void set_ID(Integer _ID) {
    this._ID = _ID;
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public Long getPrice() {
    return price;
}

public void setPrice(Long price) {
    this.price = (long) (getId() * AppUtil.getRandomNumber(10, 99));
}
}

Каксделать поле сущности Room для поддержки длинного типа данных при миграции из SQLiteOpenHelper в Room.

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Поскольку из документов SQLITE не поддерживает Long, отметьте здесь docs .

INTEGER.Значение представляет собой целое число со знаком, сохраняемое в 1, 2, 3, 4, 6 или 8 байтах в зависимости от величины значения.

Однако, поскольку LONG равно 8Байт и INTEGER также могут сохранять значения 8 байтов, вы можете использовать INTEGER .

0 голосов
/ 05 января 2019

Ответ прост: вы НЕ МОЖЕТЕ

Комната поддерживает только 5 типов данных: TEXT, INTEGER, BLOB, REAL и UNDEFINED.

Итак, типы данных Java Boolean, Integer, Long будут преобразованы в INTEGER в SQL .

Что вы можете сделать, этопреобразовать тип данных LONG в INTEGER в SQL вместо преобразования типа данных INTEGER в LONG в Room , чтобы обеспечить поддержку Room LONG, чтоКомната не поддерживает.

...