我正在创建一个dataBase来插入一个*唯一的患者*(不超过一个),所以我刚刚创建了一个autoincrement不像这样的id 的数据库:
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));
Run Code Online (Sandbox Code Playgroud)
如您所见,在此处添加患者的方法是明确告知数据库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;
}
Run Code Online (Sandbox Code Playgroud)
}
正如你所看到的,我正在尝试做的是insert一个病人,然后,如果它之前被插入,抓住Exception并扔到我的parent窗口.问题是,异常被抛出,但没有被捕获.该计划说:
Error inserting nombre=blabla edad=25 idPaciente=1
android.database.SQLiteConstraintException: error code 19: constraint failed
我知道它是关于duplication主键的东西,但我想这样做!
Flo,感谢你的答案,但是,是的,我创建了这个表,但是我没有发布的是,我有一个方法可以擦除所有数据库,然后每当按下这样的按钮时再创建它们:
db.execSQL(DROP_TABLE_HISTORIAL);
db.execSQL(DROP_TABLE_MEDICO);
db.execSQL(DROP_TABLE_CONF);
db.execSQL(DROP_TABLE_PACIENTE);
Run Code Online (Sandbox Code Playgroud)
是的,我确定.但是Sarmand的回答对我有用,所以谢谢你的帮助:-)
对不起,但我不能投票......没有足够的分数> _ <