Я создаю базу данных для вставки * уникального пациента * (не более одного), поэтому я просто создал базу данных, которая не autoincrement
, ее идентификатор выглядит так:
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);
Так что да, я уверен.Но то, что Сарманд ответил, работает для меня, поэтому спасибо за вашу помощь: -)
Извините, но я не могу голосовать ... Не хватает очков> _ <</p>