2015-05-19 258 views
-2

我有一個問題,在指定了複合主鍵的情況下將行插入表中。SQLite:唯一插入問題

複合鍵上:

_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與刪除評論:「因爲只有三列的組合纔是唯一的。「 – AntonSack

回答

4

UNIQUE約束是錯誤的列名變量具有_id從其它表,而不是在series表中的列和約束變成(_id,_id,_id),不(_id,shooting_id,program_id)

+0

謝謝!!--) – AntonSack