Android:使用Cursor从DB设置Spinner的选定项

时间:2011-08-10 11:07:45

标签: android sql sqlite cursor spinner

我有游标问题。 我的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。 表格的前缀会导致一个奇怪的错误......

1 个答案:

答案 0 :(得分:0)

您是否正确保存发票?确保您不会意外地将车库ID保存为车辆ID。

否则,如何定义“骨折”?也许那里有一个错误。