Вопрос:

ВСТАВИТЬ ИЗ ВЫБРАТЬ с комнатой

android sqlite android-room

7 просмотра

1 ответ

51 Репутация автора

Я хочу вставить значения из таблицы program_day_exercise в таблицу training_exercise. Итак, я написал этот запрос:

@Query("""
    INSERT INTO training_exercise
    SELECT 0, :trainingId, exercise_id, num, measure_weight, measure_reps, measure_time, measure_distance
    FROM program_day_exercise
    WHERE program_day_id = :programDayId
""")
fun fillTrainingWithProgramExercises(trainingId: Long, programDayId: Long)

Он компилируется, но во время выполнения возникает ошибка UNIQUE:

02-23 13:31:12.618 11881-12003/com.dmitrysimakov.kilogram E/SQLiteLog: (1555) abort at 34 in [INSERT INTO training_exercise
        SELECT 0, ?, exercise_id, num, measure_weight, measure_reps, measure_time, measure_distance
        FROM program_day_exercise
        WHERE program_day_id 
02-23 13:31:12.618 11881-12003/com.dmitrysimakov.kilogram E/AndroidRuntime: 
FATAL EXCEPTION: pool-4-thread-1
Process: com.dmitrysimakov.kilogram, PID: 11881
android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: training_exercise._id

Затем я написал этот запрос по-другому:

@Query("""
    INSERT INTO training_exercise (training_id, exercise_id, num, measure_weight, measure_reps, measure_time, measure_distance)
    SELECT :trainingId, exercise_id, num, measure_weight, measure_reps, measure_time, measure_distance
    FROM program_day_exercise
    WHERE program_day_id = :programDayId
""")
fun fillTrainingWithProgramExercises(trainingId: Long, programDayId: Long)

Работает нормально. Но плагин SQLite не может разрешать параметры в скобках.

проблема

Автор: Dmitry Simakov Источник Размещён: 23.02.2019 10:46

Ответы (1)


0 плюса

178 Репутация автора

В первом запросе вы выбираете первую строку и вставляете ее обратно в базу данных. Если idполе уникально или является первичным ключом, это не удастся, так как очевидно, что вы не можете вставить повторяющуюся запись.

Глядя на сообщение об ошибке, мы видим training_exercise._id. Вы уверены, что атрибут есть training_idи нет idили _id?

Автор: Nothematic Размещён: 23.02.2019 10:50
Вопросы из категории :
32x32