0

こんにちは、データベースのテーブルを更新しようとしていますが、列が存在しないというエラーが表示されます。テーブルは の前に正常に作成されました。情報を取得して操作することはできますが、編集アクティビティで更新することはできません。コードの一部を次に示します。

//job_cost table------------------------------------------------
    public static final String KEY_JOBCOSTID = "jobcostID";
    public static final String KEY_JOBCOSTHOURSTREMA = "jobcostHourStrema";
    public static final String KEY_JOBCOSTGROUNDTYPE = "jobcostGroundType";
    public static final String KEY_JOBCOSTPETROL = "jobcostPetrol";
    public static final String KEY_JOBCOSTOIL = "jobcostOil";
    public static final String KEY_JOBCOSTMAINTENANCE = "jobcostMaintenance";
    public static final String KEY_JOBCOSTOTHEREXPENSES = "jobcostOtherExpenses";
    public static final String KEY_JOBCOSTFINAL = "jobcostFinal";

db.execSQL("CREATE TABLE " + DATABASE_JOBCOSTTABLE + "("
                    + KEY_JOBCOSTID + " INTEGER PRIMARY KEY autoincrement , "
                    + KEY_JOBCOSTHOURSTREMA + " DOUBLE , "
                    + KEY_JOBCOSTGROUNDTYPE + " TEXT , "
                    + KEY_JOBCOSTPETROL + " DOUBLE , "
                    + KEY_JOBCOSTOIL + " DOUBLE , "
                    + KEY_JOBCOSTMAINTENANCE + " DOUBLE , "
                    + KEY_JOBCOSTFINAL + " DOUBLE , "
                    + KEY_JOBCOSTOTHEREXPENSES + " DOUBLE  )");
        }

public boolean updateJobCost(Cost costTemp,String jobForEdit){
        ContentValues cv = new ContentValues();

        cv.put( "KEY_JOBCOSTHOURSTREMA" , costTemp.getHourStrema());
        cv.put( "KEY_JOBCOSTGROUNDTYPE" , costTemp.getGroundType());
        cv.put( "KEY_JOBCOSTPETROL" , costTemp.getPetrol());
        cv.put( "KEY_JOBCOSTOIL" , costTemp.getOil());
        cv.put( "KEY_JOBCOSTMAINTENANCE" , costTemp.getMaintenance());
        cv.put( "KEY_JOBCOSTOTHEREXPENSES" , costTemp.getOtherExpenses());
        cv.put( "KEY_JOBCOSTFINAL" , costTemp.getCost());
        //cv.put(key, value)
        ourDatabase.updateWithOnConflict(DATABASE_JOBCOSTTABLE, cv, KEY_JOBCOSTID + "=" + jobForEdit, null, DATABASE_VERSION);
        return false;
    }
4

4 に答える 4

2

コンテンツの値では、キー名の定数を引用符で囲まないでください。たとえば、

 cv.put( "KEY_JOBCOSTHOURSTREMA" , costTemp.getHourStrema());

 cv.put( KEY_JOBCOSTHOURSTREMA, costTemp.getHourStrema());
于 2013-10-11T11:36:20.917 に答える
2

おそらく、更新の名前から引用符を削除する必要があります。

つまり、

cv.put( KEY_JOBCOSTHOURSTREMA , costTemp.getHourStrema());

それ以外の

cv.put( "KEY_JOBCOSTHOURSTREMA" , costTemp.getHourStrema());

于 2013-10-11T11:37:15.637 に答える
1

列名の代わりにキー値を使用しています。コードを次のように変更します。

public boolean updateJobCost(Cost costTemp,String jobForEdit){
    ContentValues cv = new ContentValues();

    cv.put( KEY_JOBCOSTHOURSTREMA , costTemp.getHourStrema());
    cv.put( KEY_JOBCOSTGROUNDTYPE , costTemp.getGroundType());
    cv.put( KEY_JOBCOSTPETROL , costTemp.getPetrol());
    cv.put( KEY_JOBCOSTOIL , costTemp.getOil());
    cv.put( KEY_JOBCOSTMAINTENANCE , costTemp.getMaintenance());
    cv.put( KEY_JOBCOSTOTHEREXPENSES , costTemp.getOtherExpenses());
    cv.put( KEY_JOBCOSTFINAL , costTemp.getCost());
    //cv.put(key, value)
    ourDatabase.updateWithOnConflict(DATABASE_JOBCOSTTABLE, cv, KEY_JOBCOSTID + "=" + jobForEdit, null, DATABASE_VERSION);
    return false;
}
于 2013-10-11T11:37:33.347 に答える
0

これを試してください:- 二重引用符 ("") を削除します

 cv.put( KEY_JOBCOSTHOURSTREMA , costTemp.getHourStrema());
    cv.put( KEY_JOBCOSTGROUNDTYPE , costTemp.getGroundType());
    cv.put( KEY_JOBCOSTPETROL , costTemp.getPetrol());
    cv.put( KEY_JOBCOSTOIL , costTemp.getOil());
    cv.put( KEY_JOBCOSTMAINTENANCE , costTemp.getMaintenance());
    cv.put( KEY_JOBCOSTOTHEREXPENSES , costTemp.getOtherExpenses());
    cv.put( KEY_JOBCOSTFINAL , costTemp.getCost());
于 2013-10-11T11:48:44.390 に答える