У меня проблема с курсорами.
У меня есть 3 таблицы в моей БД: фактура (означает счет-фактура), транспортное средство (транспортное средство) и гараж.
Счет касается одного автомобиля и одного гаража. Когда я создаю счет, я выбираю транспортное средство и гараж из счетчиков.
Когда я хочу обновить счет, мне нужно установить элемент, выбранный в этих счетчиках.
Вот как я это делаю:
for (int iVhc = 0; iVhc < spListeVhc.getCount(); iVhc++) {
Cursor valueVhc = (Cursor) spListeVhc.getItemAtPosition(iVhc);
long idVhc = facture.getLong(facture.getColumnIndexOrThrow("TB_VEHICULE._id"));
long idSpVhc = valueVhc.getLong(valueVhc.getColumnIndex("TB_VEHICULE._id"));
if (idSpVhc == idVhc) {
spListeVhc.setSelection(iVhc);
}
}
for (int iGar = 0; iGar < spListeGar.getCount(); iGar++) {
Cursor valueGar = (Cursor) spListeGar.getItemAtPosition(iGar);
long idGar = facture.getLong(facture.getColumnIndexOrThrow("TB_GARAGE._id"));
long idSpGar = valueGar.getLong(valueGar.getColumnIndex("TB_GARAGE._id"));
if (idSpGar == idGar) {
spListeGar.setSelection(iGar);
}
}
Это работает для гаража, но проблема в том, что по непонятной мне причине счетчик транспортных средств получает тот же идентификатор, что и гараж.
Это означает, что если выбранный гараж имеет идентификатор 2 в базе данных, то выбранным транспортным средством будет также транспортное средство с идентификатором 2.
??
Вот мой запрос на получение счета:
public Cursor recupFacture(long idFacture){
return db.rawQuery("SELECT TB_FACTURE._id, libelle_fa, date_fa, nom_vhc, kilometrage_fa, nom_garage, remarque_fa, date_paie_fa, montant_fa, TB_VEHICULE._id, TB_GARAGE._id" +
" FROM TB_FACTURE, TB_VEHICULE, TB_GARAGE" +
" WHERE fk_vhc_fa = TB_VEHICULE._id" +
" AND fk_gar_fa = TB_GARAGE._id" +
" AND TB_FACTURE._id ="+idFacture, null);
}
И я понял, что у меня есть такие ошибки в моем журнале:
08-10 12:54:22.431: ERROR/Cursor(17072): requesting column name with table name -- TB_VEHICULE._id
И то же самое для гаража ...
Спасибо за вашу помощь!
РЕДАКТИРОВАТЬ:
Я нашел решение.
Я заменил TB_GARAGE._id и TB_VEHICULE._id на fk в строках:
long idVhc = facture.getLong(facture.getColumnIndexOrThrow("TB_VEHICULE._id"));
long idGar = facture.getLong(facture.getColumnIndexOrThrow("TB_GARAGE._id"));
Однако я не могу действительно объяснить, почему это работает так, но не с идентификатором.
Префикс таблицы вызывает странную ошибку ...