使用Android的SQLiteConstraintException

时间:2011-06-23 09:15:07

标签: android 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));

如您所见,在此处添加患者的方法是明确告知数据库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,但我想这样做!


Flo,感谢你的回答,但是,是的,我创建了这个表,但是我没有发布的是,我有一个方法可以删除所有数据库,然后每当按下这样的按钮时再创建它们:

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

所以是的,我确定。但是Sarmand的回答对我有用,所以谢谢你的帮助: - )

抱歉,但我不能投票......没有足够的分数> _<

1 个答案:

答案 0 :(得分:5)

如果要复制主键,则不要将其声明为主键。这样做

创建表,如果不存在PACIENTE(idPaciente INTEGER,....);