使用SUM时出现Android sql错误

问题描述:

我遇到了一个问题,在其中使用了SUM查询。我在列表视图中显示日期和数量的克。如果没有SUM,它会显示日期和克罚款,但是如果一个日期有多个条目,它不会累加克数。 SQL查询在我在sqlite数据库浏览器中测试时工作。下面是我的一些此代码:使用SUM时出现Android sql错误

//attempt 2:  
public Cursor getOverviewDate(){ 
     String test = "SELECT _id, date, SUM(gram) FROM nutvalues GROUP BY date;"; 
     Cursor cursor = db.rawQuery(test, null); 
     return cursor; 
    } 

如何查询结果得到输出:

//attempt 1: 
public Cursor getOverviewDate(){ 
    String[] columns = new String[]{ C_ID, C_DATE, "sum(" + C_GRAM + ")" }; 
    Cursor cursor = db.query(TABLE, columns, 
     null, null, C_DATE, null, null); 

    return cursor; 
    } 

香港专业教育学院也有rawquery试图

  mySQLiteAdapter = new CalorieCounterDbAdapter(this); 
     mySQLiteAdapter.open(); 

     Cursor cursor = mySQLiteAdapter.getOverviewDate(); 
     startManagingCursor(cursor); 

     final String[] columns = { CalorieCounterDbAdapter.C_DATE, CalorieCounterDbAdapter.C_GRAM}; 
     int[] to = new int[]{R.id.date, R.id.gram}; 

     SimpleCursorAdapter cursorAdapter = 
     new SimpleCursorAdapter(this, R.layout.row, cursor, columns, to); 

     listContent.setAdapter(cursorAdapter); 

     mySQLiteAdapter.close(); 

我想显示的错误之一在logcat中是解决方案的关键:

01-07 14:31:27.686: E/AndroidRuntime(10497): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
01-07 14:31:27.686: E/AndroidRuntime(10497): at dalvik.system.NativeStart.main(Native Method) 
01-07 14:31:27.686: E/AndroidRuntime(10497): Caused by: java.lang.IllegalArgumentException: column 'gram' does not exist 
01-07 14:31:27.686: E/AndroidRuntime(10497): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314) 
01-07 14:31:27.686: E/AndroidRuntime(10497): at android.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:312) 
01-07 14:31:27.686: E/AndroidRuntime(10497): at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:87) 
01-07 14:31:27.686: E/AndroidRuntime(10497): at com.korsakopf.caloriecounter.CalorieCounterOverviewActivity.onCreate(CalorieCounterOverviewActivity.java:39) 
01-07 14:31:27.686: E/AndroidRuntime(10497): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
01-07 14:31:27.686: E/AndroidRuntime(10497): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

我一直在寻找3天的解决方案。我是编程/ Android的绝对初学者,所以它可能只是一个nooby错误,但我似乎无法找到它。

+0

首先说列'克'不存在。 CalorieCounterDbAdapter.C_GRAM ==“gram”'? – tidbeck 2012-01-07 15:23:48

+0

你的桌子有'克'列吗? – kosa 2012-01-07 15:43:34

+1

看起来我设法解决它。在有人在这里发布了答案后,我发现它,但由于某种原因,他删除了他的答案,因此我的答复评论也被删除了。 原来我需要改变查询: '选择_id,日期,金额(克)为克,来自nutvalues GROUP BY date' 所以这是因为我没有有“革兰氏”的一部分在里面。 Thx所有回复! – user1135968 2012-01-07 15:51:35

最后,我可以回答我的问题,我不能在第一,因为限制:)

看起来像我设法解决这个问题。在有人在这里发布了答案后,我发现它,但由于某种原因,他删除了他的答案,因此我的答复评论也被删除了。原来我需要查询更改为:

SELECT _id, date, sum(gram) as gram, FROM nutvalues GROUP BY date

所以这是因为我没有在它的“as gram”的一部分。

Thx所有回复!

+1

恭喜你修好了,当你可以的时候,请将你的答案标记为“已接受”,以便其他人可以从你的成功中学习。 – 2012-01-11 13:17:44