2017-02-13 50 views
0

这是我的selectedDayChange我mainactivity.javaSQLiteException使用WHERE “+ KEY_Date +”= ' “+日期+”'”

date= year +""+ month +""+ dayOfMonth; 

        allfood food = new allfood(); 
        food.Date="DATE_"+date; 
        double a = repo.totalFat(food); 
        Toast.makeText(getApplicationContext(), "" +a, Toast.LENGTH_LONG).show(); 

虽然这是对我的repo.java

public double totalFat(allfood date){ 


     SQLiteDatabase db = dbHelper1.getReadableDatabase(); 

     String query = "SELECT SUM(Fat) FROM " +allfood.TABLE+ " WHERE " +KEY_Date+"="+date; 

     Cursor c = db.rawQuery(query, null); 

     c.moveToFirst(); 
     double i=c.getDouble(0); 

     return i; 

    } 

然后,它显示了一个错误,顺便说一句,我知道我需要做这样的事情:KEY_Date+"='"+date+"'"

String query = "SELECT SUM(Fat) FROM " +allfood.TABLE+ " WHERE " +KEY_Date+"='"+date+"'"; 

android.database.sqlite.SQLiteException:near“。”:语法错误(代码 1):,while compiling:SELECT SUM(Fat)FROM allfood WHERE [email protected]

此行

[email protected]

应该

日期= DATE_20170213

我怎样才能解决这个问题?

回答

0

1)不要将字面allfood对象添加到字符串。 SQL无法解释Java对象。

该方法应该是以下任一项,因为allfood是整个对象,您确实需要它作为参数。并将其命名为date简直令人困惑。

  • totalFat(Date date)
  • totalFat(String date)
  • totalFat(Calendar date)
  • totalFat(int year, int month, int dayOfMonth)


日期= DATE_20170213

2)不,它确实不应该是因为Sqlite does not support that format of dates。此外,前期待定DATE_只是浪费数据库中的存储空间。

3)请不要使用此

date= year +""+ month +""+ dayOfMonth 

构建Calendar对象,并使用SimpleDateFormat正确地得到一个日期格式的字符串。

使用上面的最后一个选项,你有这样的事情

SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); 
Calendar calendar = Calendar.getInstance(); 
calendar.set(year, month, dayOfMonth); 
String queryForDate = fmt.format(calendar.getTime()); 
// db.query(TABLE_NAME, null, new String[] {... // TODO: Complete this 
+0

我在某处读到列犯规接受(这是今天的日期),如20170213号所有,所以我补充说:“DATE_”但你说了什么,我把我的日期格式化为2017-02-13,我有同样的错误,我想我需要包装或通过价值。你怎么看? –

+0

哦,对不起,我输入很慢,等待先生,我会使用你建议的代码 –

+0

不要只是复制粘贴我拥有的。试着理解我为什么要这么做 –