2011-06-23 30 views
0

我創建一個數據庫中插入一個* 獨特病人*(不超過一個),所以我只是創造了不autoincrement其ID這樣的數據庫:SQLiteConstraintException與Android

CREATE TABLE IF NOT EXISTS PACIENTE(idPaciente INTEGER PRIMARY KEY, nombre VARCHAR(100) NOT NULL, apellidos VARCHAR(100), email VARCHAR(100), genero CHAR, edad INTEGER NOT NULL, peso INTEGER, kMedico INTEGER, pkHistorial INTEGER, pkConfProg INTEGER, altura INTEGER, FOREIGN KEY (pkMedico) REFERENCES MEDICO(idMedico), FOREIGN KEY (pkHistorial) REFERENCES HISTORIAL(idHistorial), FOREIGn KEY (pkConfProg) REFERENCES CONFPROGRAMA(idConf)); 

如您所見,在此添加患者的方式是明確告訴數據庫idPaciente。

所以我用這個代碼中插入一個病人:

public long addPaciente(BDPaciente pac) 
{ 
ContentValues cv = new ContentValues(); 
cv.put("idPaciente", 1); 
cv.put("nombre", pac.getNombre()); 
cv.put("edad", 26); 

try 
{ 
    db.insert("PACIENTE", null, cv); 
    return -1; 
} 
catch (SQLiteConstraintException e) 
{ 
    return -100; 
} 

}

正如你所看到的,我想要做的是insert病人,然後,如果是插入之前,趕上Exception並把它扔到我的parent窗口。事情是,拋出異常,但沒有抓住。而節目說:

Error inserting nombre=blabla edad=25 idPaciente=1 android.database.SQLiteConstraintException: error code 19: constraint failed

我知道這是一些關於duplication的主鍵,但我想這樣做!


弗洛,還得感謝你的回答,但是,是的,我創建了表,但我沒有張貼,是,我有一個方法擦除所有的數據庫,然後重新建立他們時,我按下一個按鈕是這樣的:

db.execSQL(DROP_TABLE_HISTORIAL); 
    db.execSQL(DROP_TABLE_MEDICO); 
    db.execSQL(DROP_TABLE_CONF); 
    db.execSQL(DROP_TABLE_PACIENTE); 

所以是的,我敢肯定。但是Sarmand回答爲我工作,所以謝謝你的幫助:-)

對不起,我不能投票......不要有足夠的積分> _ <

+0

當您開始新的代碼測試運行時,您確定數據庫爲空嗎? – Flo

回答

5

如果你想複製主鍵然後不宣佈它作爲主鍵。像這樣做

CREATE TABLE IF NOT EXISTS PACIENTE(idPaciente INTEGER,....);

+0

哇,非常感謝你......我犯了一個多麼愚蠢的錯誤...... :)它現在非常棒! – Sonhja