15

tableA、tableB、および tableC があります テーブル A と tableB は tableA.Id(PK) = tableB.tableAId(FK) テーブル B と tableC は tableB.Id(PK) = tableC.tableBId(FK) で結合されます

私はこれを行うことができるようにしたい:

SELECT c.ALL from tableC c
INNER JOIN tableB b on c.tableBId = b.Id
INNER JOIN tableA a on b.tableAId = a.Id
WHERE a.Id = 108

db.rawquery() を使用してこのクエリを実装する Web 上の多くの投稿を見つけました。ただし、rawquery() は query() よりも安全性が低いと聞いたことがあります。したがって、初心者としてベストプラクティスを求めるために、私の質問は次のとおりです。

db.rawquery() の代わりに db.query() を使用してこのクエリを実装する方法はありますか?

前もって感謝します。

4

5 に答える 5

-2
public HashMap<String, String> get_update_invoice_getdata(String gen) {
    // TODO Auto-generated method stub
    HashMap<String, String> wordList;
    wordList = new HashMap<String, String>();
    Cursor cur_1 = ourDataBase
            .rawQuery(
                    "SELECT * FROM  Invoice i JOIN Client c ON i.Client_id=c.Client_id JOIN TAX t ON i.Tax_id=t.Tax_id JOIN Task it ON i.Task_id=it.Task_id WHERE i.Inv_no=?",
                    new String[] { gen });
    int intext = cur_1.getColumnIndex(C_ORG_NAME);
    int intext5 = cur_1.getColumnIndex(TA_NAME);
    int intext6 = cur_1.getColumnIndex(TA_RATE);
    int intext7 = cur_1.getColumnIndex(TA_QTY);
    int intext8 = cur_1.getColumnIndex(TA_TOTAL);

    if (cur_1.moveToFirst()) {

        do {
            wordList.put("Org_name", cur_1.getString(intext));
            wordList.put("client_id", cur_1.getString(2));
            wordList.put("po_number", cur_1.getString(4));
            wordList.put("date", cur_1.getString(3));
            wordList.put("dis_per", cur_1.getString(7));

            wordList.put("item_name", cur_1.getString(intext5));
            wordList.put("item_rate", cur_1.getString(intext6));
            wordList.put("item_cost", cur_1.getString(intext7));
            wordList.put("item_total", cur_1.getString(intext8));

        } while (cur_1.moveToNext());
    }

    return wordList;
}
于 2014-05-12T04:23:29.957 に答える