0

同じ を持つ行のすべての値を 1 つのテーブルで検索し、nameそれらを別のテーブルに配置しようとしています。

私は自分のアプリケーションの別の部分でこれを成功させ、このコードを作業コードの後に​​モデル化しましたが、何らかの理由で機能しません。テーブルからテーブルへ移動する値は 1 つだけです。

取得元のテーブルにDATABASE_FAV_EQUIP_TABLE複数の行があることを確認しました。

機能しないコードは次のとおりです。

//takes all equip data from saved equip set, and puts into equip table
public String AddSavedEquipToEquipTable(String name) {
        // TODO Auto-generated method stub
        String[] columns = new String[]{KEY_EQUIP, KEY_FAVNAME};
        ContentValues cv = new ContentValues();
        Cursor c = ourDatabase.query(DATABASE_FAV_EQUIP_TABLE, columns, KEY_FAVNAME + "='" + name + "'", null, null, null, null);

        if (c == null){
            return null;
        }
        else if(c != null && c.moveToFirst()) {
            do {
                int iEquip = c.getColumnIndex(KEY_EQUIP);                   

                String equipment = c.getString(iEquip);

                cv.put(KEY_EQUIP, equipment);
                ourDatabase.insert(DATABASE_EQUIP_TABLE, null, cv);

                } while (c.moveToNext() && KEY_FAVNAME == name);
            }


        return null;
    }

私のアプリケーションの別の部分で機能しているコードは次のとおりです。

//takes all rows in chest table and puts them into the chosen equipment database
public String AddToEquipmentDBFromChest(String equip) {
    // TODO Auto-generated method stub
    String[] columns = new String[]{KEY_REPS, KEY_EXERCISE, KEY_TIMETYPE};
    ContentValues cv = new ContentValues();
    Cursor c = ourDatabase.query(DATABASE_CHESTTABLE, columns, KEY_EQUIP + "='" + equip + "'", null, null, null, null);

    if (c == null){
        return null;
    }
    else if(c != null && c.moveToFirst()) {
        do {
            int iReps = c.getColumnIndex(KEY_REPS);
            int iExercise = c.getColumnIndex(KEY_EXERCISE);
            int iTimeType = c.getColumnIndex(KEY_TIMETYPE);

            String reps = c.getString(iReps);
            String exercise = c.getString(iExercise);
            String time = c.getString(iTimeType);

            cv.put(KEY_REPS, reps);
            cv.put(KEY_EXERCISE, exercise); 
            cv.put(KEY_TIMETYPE, time);

            ourDatabase.insert(DATABASE_CHOSEN_EQUIP_TABLE, null, cv);
            } while (c.moveToNext() && KEY_EQUIP == equip);
        }


    return null;
}

私はこれを何度も繰り返してきましたが、何かが欠けているに違いありません。

4

2 に答える 2

1

関数内でどちらKEY_FAVNAMEname変更しないため、ループの各反復でそれらを比較しても、何も役に立ちません。クエリで一致する名前を既にチェックしていることを考えると、ループでもこのチェックを実行しようとしている理由がわかりません。KEY_FAVNAME == name比較を完全に取り出してください。


ちなみに:

KEY_FAVNAME == name

これは、Java で文字列を比較する方法ではありません。これの方が良い:

KEY_FAVNAME.equals(name)

さらに偶然なことに、あなたのコードは不必要に冗長です。クエリが失敗すると例外がスローされるため、カーソルを null チェックする必要はありません。ただし、終了したらカーソルを閉じる必要があります。典型的なパターンは次のとおりです。

Cursor c = db.query(....);
try {

    // do all your cursor iteration in here

} finally {
    c.close();
}
于 2012-07-19T13:48:26.880 に答える
0
while (c.moveToNext() && KEY_FAVNAME == name);

これは、名前が正しくないとすぐに do while ループから抜け出します。あなたは破りたくない、その記録をスキップしたいだけです.

于 2012-07-18T22:31:23.597 に答える