如何在Android中使用SQLite COUNT来返回行数

时间:2014-12-31 23:38:09

标签: android sqlite return

我想编写一个查询,将所有字符串值为" left"的行相加。在名为DIRECTION的列中。接下来我要归还这笔钱。

在我的代码片段中,它假设已建立数据和数据库。

这是原型:

public int getSumLeft() {
    String selectQuery =  "SELECT COUNT( "+TableData.TableInfo.DIRECTION+" ) WHERE "+TableData.TableInfo.DIRECTION+" = left";
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    cursor.moveToFirst();
    int sum = cursor.getInt(0);
    cursor.close();
    return sum;
}

我已经尝试了几个查询,这个似乎是我需要的关闭。我认为问题在于声明' int sum = cursor.getInt(0);'

我认为零参数会覆盖结果。当我删除零时代码中断。 getInt是一个SQLite函数,用于访问数据库中的数据。我没有创建该功能。但我必须使用它或其他类似功能。

另外,我是否需要在查询周围放置一个while循环来移动光标以进行COUNT查询?没有数据库计数,因此不需要迭代?

是否有另一种方法可以计算字符串值为' left'总和可以退还吗?

完整代码:

数据库: https://github.com/Leoa/Accelerometer/tree/AccelerometerDEV/app/src/main/java/thedatabase

实现(参见onCreate函数中的按钮): https://github.com/Leoa/Accelerometer/blob/AccelerometerDEV/app/src/main/java/com/leobee/accelerometer/MainActivity.java

感谢您对此进行调查。

2 个答案:

答案 0 :(得分:2)

  

我认为零参数会覆盖结果

我不知道你认为这意味着什么。

  

当我删除零时代码中断

这是因为getInt()需要知道要检索的Cursor列。

您也在运行时崩溃,因为您的SQL无效。您的SQL语句相当于:

SELECT COUNT(foo) WHERE foo = left

(其中foo是Java引用的TableData.TableInfo.DIRECTION

您的SQL语句不仅缺少要查询的表,而且如果left应该是字符串列的值,则需要引用它。你最终会得到:

SELECT COUNT(foo) FROM tablename WHERE foo = 'left'
  

我是否需要在查询周围放置一个while循环来移动光标以进行COUNT查询?

没有

  

是否有另一种方法可以计算字符串值为' left'总和可以退还吗?

不是真的,除了我在上面概述的修复。

答案 1 :(得分:1)

我认为问题是你需要在' left'

上添加引号
String selectQuery =  "SELECT COUNT( "+TableData.TableInfo.DIRECTION+" ) WHERE "+TableData.TableInfo.DIRECTION+" = 'left'"