Android Room Вставить в таблицу не работает - PullRequest
0 голосов
/ 01 ноября 2018

Я смотрю вокруг и не могу найти объяснения, почему это происходит. Я попытался открыть свой db-файл в таких приложениях, как sqliteman, и выполнить запросы INSERT INTO самостоятельно, и так оно и работает. Тем не менее, независимо от того, что Комната работает, она не работает, она не падает или что-то в этом роде, она просто ничего не вставляет.

Таким образом, в основном у меня есть 2 таблицы, соединенные в отношение m-n через таблицу соединений:

1) Песенный стол

@Entity(tableName = RoomDbConstants.TABLE_NAME_SONGS,
    foreignKeys = [ForeignKey(entity = Album::class,
            parentColumns = [RoomDbConstants.COLUMN_ALBUM_ARTIST_NAME, RoomDbConstants.COLUMN_ALBUM_NAME],
            childColumns = [RoomDbConstants.COLUMN_SONG_ARTIST_NAME, RoomDbConstants.COLUMN_SONG_ALBUM_NAME],
            onDelete = ForeignKey.CASCADE),
        ForeignKey(entity = Genre::class,
                parentColumns = [RoomDbConstants.COLUMN_GENRE_NAME],
                childColumns = [RoomDbConstants.COLUMN_SONG_GENRE_NAME],
                onDelete = ForeignKey.CASCADE)])
data class Song(
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = RoomDbConstants.COLUMN_SONG_ID)
    val id: Long?,
    @ColumnInfo(name = RoomDbConstants.COLUMN_SONG_DATA)
    val songData: String,
    @ColumnInfo(name = RoomDbConstants.COLUMN_SONG_NAME)
    val name: String,
    @ColumnInfo(name = RoomDbConstants.COLUMN_SONG_ALBUM_NAME)
    val albumName: String,
    @ColumnInfo(name = RoomDbConstants.COLUMN_SONG_ARTIST_NAME)
    val artistName: String,
    @ColumnInfo(name = RoomDbConstants.COLUMN_SONG_GENRE_NAME)
    val genreName: String,
    @ColumnInfo(name = RoomDbConstants.COLUMN_SONG_TRACK_NUMBER)
    val trackNumber: Int = RoomDbConstants.TRACK_NUMBER_DEFAULT,
    @ColumnInfo(name = RoomDbConstants.COLUMN_SONG_YEAR_PUBLISHED)
    val yearPublished: Int = RoomDbConstants.YEAR_PUBLISHED_NONE,
    @ColumnInfo(name = RoomDbConstants.COLUMN_SONG_START_TIME_IN_MILLIS)
    val startTimeInMillis: Int,
    @ColumnInfo(name = RoomDbConstants.COLUMN_SONG_END_TIME_IN_MILLIS)
    val endTimeInMillis: Int,
    @ColumnInfo(name = RoomDbConstants.COLUMN_SONG_DURATION_IN_MILLIS)
    val durationInMillis: Int,
    @ColumnInfo(name = RoomDbConstants.COLUMN_SONG_COVER_DATA)
    val coverData: String?)

2) Таблица воспроизведения

@Entity(tableName = RoomDbConstants.TABLE_NAME_PLAYLISTS,
    indices = [Index(value = [RoomDbConstants.COLUMN_PLAYLIST_NAME], unique = true)])
data class Playlist(
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = RoomDbConstants.COLUMN_PLAYLIST_ID)
    val id: Long?,
    @ColumnInfo(name = RoomDbConstants.COLUMN_PLAYLIST_NAME)
    val name: String,
    @ColumnInfo(name = RoomDbConstants.COLUMN_PLAYLIST_COVER_DATA)
    val coverData: String?)

3) SongsPlaylistsLink (таблица, которая соединяет песни и плейлисты)

@Entity(tableName = RoomDbConstants.TABLE_NAME_SONGS_PLAYLISTS_LINKS,
    primaryKeys = [RoomDbConstants.COLUMN_SONGS_PLAYLISTS_LINK_SONG_ID,
        RoomDbConstants.COLUMN_SONGS_PLAYLISTS_LINK_PLAYLIST_ID],
    foreignKeys = [ForeignKey(entity = Song::class,
            parentColumns = [RoomDbConstants.COLUMN_SONG_ID],
            childColumns = [RoomDbConstants.COLUMN_SONGS_PLAYLISTS_LINK_SONG_ID],
            onDelete = ForeignKey.CASCADE),
        ForeignKey(entity = Playlist::class,
                parentColumns = [RoomDbConstants.COLUMN_PLAYLIST_ID],
                childColumns = [RoomDbConstants.COLUMN_SONGS_PLAYLISTS_LINK_PLAYLIST_ID],
                onDelete = ForeignKey.CASCADE)],
    indices = [Index(value = [RoomDbConstants.COLUMN_SONGS_PLAYLISTS_LINK_SONG_ID,
    RoomDbConstants.COLUMN_SONGS_PLAYLISTS_LINK_PLAYLIST_ID], unique = true)])
data class SongsPlaylistsLink(
    @ColumnInfo(name = RoomDbConstants.COLUMN_SONGS_PLAYLISTS_LINK_SONG_ID)
    val songId: Long,
    @ColumnInfo(name = RoomDbConstants.COLUMN_SONGS_PLAYLISTS_LINK_PLAYLIST_ID)
    val playlistId: Long)

Вставить функцию:

@Insert
fun insert(songsPlaylistsLink: SongsPlaylistsLink)

Итак, вот что я пытался сделать: У меня уже есть песни и плейлисты в базе данных. Допустим, у меня есть песня с идентификатором 1 и плейлистом с идентификатором 1. Когда я вставляю (SongsPlaylistsLink (1,1)), ничего не происходит. Таблица еще пуста.

Любая помощь в том, почему это происходит, будет принята с благодарностью!

1 Ответ

0 голосов
/ 02 ноября 2018

Похоже, что запуск db.beginTransaction () и db.endTransaction () до и после операторов вставки, соответственно, работает не очень хорошо. Удаление это исправило это для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...