我想编写一个查询,将所有字符串值为" 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
感谢您对此进行调查。
答案 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'"