2017-02-13 4 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: рядом "": ошибка синтаксиса (код 1):, при компиляции: SELECT SUM (Fat) FROM allfood WHERE [email protected]

Эта линия

[email protected]

должен быть

Date = 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 = 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

Не просто скопировать вставку, что у меня есть. Попытайтесь понять, почему я это делаю –