2014-07-16 77 views
0

编辑:找到解决方案(在后的底部),仍然不知道问题是什么,虽然在我的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(); 
    } 
+0

尝试从设备中拉出数据库并查看它。它存储什么?使用这些解决方案之一如何拉出数据库:http://stackoverflow.com/questions/14744496/extract-database-of-an-application-from-android-device-through-adb或http:// stackoverflow。 COM /问题/ 9997976/Android的拉取的SQLite数据库,Android的设备。 –

回答

1

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

使用ContentValues将参数绑定为字符串。您也可以使用例如SQL中的'单引号'。

+0

哦,是的,当然。这就说得通了!非常感谢! –