我有游标问题。 我的DB中有3个表:facture(表示发票),vehicule(车辆)和车库。
发票涉及一辆车和一辆车库。当我创建发票时,我从纺纱厂选择车辆和车库。
当我想更新发票时,我需要设置在这些微调器中选择的项目。
我是这样做的:
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);
}
}
它适用于车库,但问题是,由于我不理解的原因,车辆的旋转器使用与车库相同的ID。
这意味着,如果选择的车库在DB中具有ID 2,则所选车辆也将是ID为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
同样的车库...
感谢您的帮助!
编辑:
我找到了解决方案。
我用以下行中的fk替换了TB_GARAGE._id和TB_VEHICULE._id:
long idVhc = facture.getLong(facture.getColumnIndexOrThrow("TB_VEHICULE._id"));
long idGar = facture.getLong(facture.getColumnIndexOrThrow("TB_GARAGE._id"));
但是,我无法解释为什么它会像这样工作,但不能解释ID。 表格的前缀会导致一个奇怪的错误......
答案 0 :(得分:0)
您是否正确保存发票?确保您不会意外地将车库ID保存为车辆ID。
否则,如何定义“骨折”?也许那里有一个错误。