Данные, хранящиеся в БД с комнатой, зависят от класса данных, который вы используете. Если вы укажете класс данных с Int
членом, это будет Int
в БД.
Пример:
data class TrackPlayedDB (
@PrimaryKey(autoGenerate = true)
val _id: Int = 0,
val timesPlayed: Int,
val artist: String,
val trackTitle: String,
val playDateTime: LocalDateTime
)
здесь timesPlayed
будет Int на БД (как _id
). Вы будете определять свои классы данных, как показано ниже, это создаст соответствующие таблицы.
@Database(entities = [TrackPlayedDB::class], version = 1, exportSchema = false)
@TypeConverters(Converters::class)
abstract class MyRoomDatabase : BaseRoomDatabase() {
Редактировать: После комментария автора, я исправлен, я не правильно понял вопрос.
Автор фактически спрашивает, как сохранить List<Int>
как поле в таблице. Для этого есть 2 решения: одно, как предлагает автор, заключается в том, чтобы сохранить список в виде строки и использовать ключевое слово Like
для написания запросов со следующим предложением:
SELECT * FROM mytable
WHERE column1 LIKE '%word1%'
OR column1 LIKE '%word2%'
OR column1 LIKE '%word3%'
в качестве простого поиска. на SO показало бы: SQL Поле SELECT WHERE содержит слова
Автор говорит, что он использовал TypeConverters, поэтому я пропущу, как преобразовать List<Int>
в строку
Другим решением этой проблемы является осознание того, что ничего не было понято в теории транзакционных баз данных. Фактически, когда у вас есть отношение многие ко многим, как в случае подкаста и жанра, теория диктует, что вы создаете таблицу, которая связывает идентификаторы подкастов и идентификаторы жанров, как это объясняется здесь: https://dzone.com/articles/how-to-handle-a-many-to-many-relationship-in-datab и другие бесчисленные книги, видео и блоги. Это дает преимущества БД с добавленной ясностью, производительностью и масштабируемостью. Итог, авторский дизайн БД неверен.