SQLite: уникальная проблема вставки

-3

У меня проблема с вставкой строк в таблицу с указанным составным первичным ключом.

Составной ключ:

_id = id of the series (this starts always with 0 for every new shooting)
shooting_id = id of my training session
program_id = id of discipline I am currently training

Всякий раз, когда я пытаюсь вставить вторую строку с таким же значением столбца "_id", я получаю эту ошибку:

INSERT INTO series(_id,shooting_id,rings,program_id) VALUES (?,?,?,?)]:       UNIQUE constraint failed: series._id, series._id, series._id 05-19 08:36:05.070    2417-2417/? E/SQLiteDatabase﹕ Error inserting _id=0 shooting_id=1 rings=100 program_id=0 android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: series._id, series.program_id, series._id (code 2067)

Пример:

// first training session
INSERT INTO series(_id,shooting_id,rings,program_id) VALUES (0,0,100,0)
INSERT INTO series(_id,shooting_id,rings,program_id) VALUES (1,0,98,0)
INSERT INTO series(_id,shooting_id,rings,program_id) VALUES (2,0,98,0)
// second training session --> only shooting_id has changed (!!)
INSERT INTO series(_id,shooting_id,rings,program_id) VALUES (0,1,100,0) <-- results in above error

Таблица указана следующим образом:

private static final String CREATE_TABLE_SERIES = "CREATE TABLE IF NOT EXISTS " 
+ TABLE_SERIES + " ("
+ COLUMN_SERIES_SHOOTING_ID + " integer NOT NULL, "
+ COLUMN_SERIES_PROGRAM_ID + " integer NOT NULL, "
+ COLUMN_SERIES_ID + " integer NOT NULL, "
+ COLUMN_SERIES_RINGS + " integer NOT NULL, "
+ "FOREIGN KEY(" + COLUMN_SERIES_SHOOTING_ID + ") REFERENCES " + TABLE_SHOOTING + "(_id), "
+ "UNIQUE (" + COLUMN_SHOOTING_ID + "," + COLUMN_SERIES_PROGRAM_ID + "," + COLUMN_SERIES_ID + "));";'

Зачем?? :-(

  • 0
    @Downvoter с удаленным комментарием: «Потому что уникальным является только сочетание всех трех столбцов».
Теги:
unique
composite-primary-key

1 ответ

4
Лучший ответ

Неправильное ограничение UNIQUE. Переменные имя столбца имеют _id из других таблиц, а не столбцов в series таблицы и ограничение становится (_id,_id,_id), а не (_id,shooting_id,program_id).

  • 0
    Благодаря тонну! ;-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню