编辑:找到解决方案(在帖子底部),仍不确定问题是什么
我的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 :(得分:1)
问题是你没有引用你的日期字符串文字而且它被视为算术表达式。 2014-7-16等于1991年。
使用ContentValues将args绑定为字符串。您也可以使用例如&#39;单引号&#39;在SQL中。