簡體   English   中英

表已更新,但未返回正確的值

[英]Updated table, but isn't returning the correct value

可能很簡單,但花了我很長時間才能弄清楚。

我想保存等級欄等級,然后在重新打開活動時加載該等級。 但是它總是返回0。

我有一個帶有評分列的配方表:

final String CREATE_TABLE_RECIPES = "CREATE TABLE IF NOT EXISTS " +
        TABLE_RECIPES + "(" +
        RECIPE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
        RECIPE_NAME + " TEXT, " +
        RECIPE_INSTRUCTIONS + " TEXT, " +
        RECIPE_RATING + " FLOAT " +
        ")";

我有一個onRatingBarChange偵聽器,將評分保存到表中:

(id和rating的值正確)

ratingbar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
        @Override
        public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
            db.addRating(id, rating);
       }
});

db類中的addRating方法:

public void addRating(int id, float rating) {
    String SET_RATING =
            "UPDATE " + TABLE_RECIPES +
                    " SET " + RECIPE_RATING + " = " + rating +
                    " WHERE " + RECIPE_ID + " = " + id;

    SQLiteDatabase db = this.getWritableDatabase();
    db.rawQuery(SET_RATING, null);
    db.close();
}

最后是db類中的getRating方法:

public float getRating(int id) {
    String GET_RATING =
            "SELECT " + RECIPE_RATING +
                    " FROM " + TABLE_RECIPES +
                    " WHERE " + RECIPE_ID + " = "  + id;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor c = db.rawQuery(GET_RATING, null);
    c.moveToFirst();
    float rating =  c.getFloat(0);
    Log.i("getRating", "gotRating: " + rating);
    return rating;
}

返回的等級始終為0,因此它未正確保存或未正確獲得該值。

 db.rawQuery(SET_RATING, null); 

您應該將execSQL()用於UPDATE查詢,而不是rawQuery() (或便捷包裝之一,例如update() 。)

rawQuery()編譯基礎SQL但不執行它; execSQL()編譯並運行SQL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM