SQLite游标值更改

时间:2014-07-16 10:12:29

标签: android sqlite

编辑:找到解决方案(在帖子底部),仍不确定问题是什么

我的SQLite数据库中有一个非常奇怪的错误(或者我可能没有足够的睡眠)

输入用户体重,输入日期。如果用户在同一天输入两次或更多次,则最后一个条目将被覆盖。 它看起来很好,但是当我提取数据时,日期字符串由于某种原因而改变。

创建表格:

String CREATE_BODYWEIGHT_TABLE = "CREATE TABLE " + TABLE_BODYWEIGHT + "(" + KEY_DATE + " TEXT PRIMARY KEY," + KEY_WEIGHT + " REAL)";

输入和检索:

public void insertWeight(String date, float weight){
        SQLiteDatabase db = this.getWritableDatabase();
        Log.d("DBHandler date", date);
        db.execSQL("INSERT OR REPLACE INTO " + TABLE_BODYWEIGHT + "(date, weight) VALUES (" + date + ", " + weight + ")");
    }

    public HashMap<String, Float> getAllWeightEntries(){
        HashMap<String, Float> dateAndWeight = new HashMap<String, Float>();
        // Select All Query
        String selectQuery = "SELECT * FROM " + TABLE_BODYWEIGHT;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                Log.d("Return date", cursor.getString(0));
                dateAndWeight.put(cursor.getString(0), cursor.getFloat(1));
            } while (cursor.moveToNext());
        }

        // return map
        return dateAndWeight;
    }

这是logCat的输出:

07-16   12:03:42.758:   DBHandler date:     2014-07-16
07-16   12:03:42.798:   Return date:        1991
07-16   12:03:42.798:   Date:               1991
07-16   12:03:42.798:   Weight:             123.0

修改 我将insertWeight更改为以下内容,现在可以正常工作:

public void insertWeight(String date, float weight){
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_DATE, date);
        values.put(KEY_WEIGHT, weight);

        db.insertWithOnConflict(TABLE_BODYWEIGHT, null, values, SQLiteDatabase.CONFLICT_REPLACE);
        db.close();
    }

1 个答案:

答案 0 :(得分:1)

问题是你没有引用你的日期字符串文字而且它被视为算术表达式。 2014-7-16等于1991年。

使用ContentValues将args绑定为字符串。您也可以使用例如&#39;单引号&#39;在SQL中。