【问题标题】:Updated table, but isn't returning the correct value更新了表格,但没有返回正确的值
【发布时间】:2018-04-21 14:57:20
【问题描述】:

可能很简单,但我花了很长时间才弄清楚。

我想保存评分栏评分,然后在我重新打开活动时加载该评分。但它总是返回 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,因此要么未正确保存,要么未正确获取值。

【问题讨论】:

    标签: java android sql sqlite


    【解决方案1】:
    db.rawQuery(SET_RATING, null);
    

    对于UPDATE 查询,您应该使用execSQL(),而不是rawQuery()。 (或方便的包装之一,例如update()。)

    rawQuery() 编译底层 SQL 但不执行; execSQL() 编译和运行 SQL。

    【讨论】:

      猜你喜欢
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      • 2014-07-15
      相关资源
      最近更新 更多