我创建了我的数据库,我试图从我的表中获得布尔值为真的所有字段的计数,计数它们并按键对它们进行分组。当我在mysql中运行这个查询时,它可以工作。另外,如果我以String query = "SELECT "+LATITUDE+", "+LONGITUDE+", COUNT(*) FROM "+CHECKED_IN_TABLE+" GROUP BY "+LATITUDE+", "+LONGITUDE;的身份运行查询,它也会工作,但这将给出一个由lat和Lon分组的计数。有什么想法吗?错误可追溯到游标声明第4行,我认为是由于rawQuery!。提前谢谢。
public List<String> getCurrentCrowd(){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT "+LATITUDE+", "+LONGITUDE+",COUNT(*) FROM "+CHECKED_IN_TABLE+" WHERE currnet = true GROUP BY "+LATITUDE+", "+LONGITUDE;
Cursor cursor = db.rawQuery(query,null);
List<String> locations = new ArrayList<>();
if(cursor.moveToFirst()){
while (!cursor.isAfterLast()){
String latitude = cursor.getString(cursor.getColumnIndex(LATITUDE));
String longitude = cursor.getString(cursor.getColumnIndex(LONGITUDE));
int count = cursor.getInt(cursor.getColumnIndex("COUNT(*)"));
locations.add(latitude+","+longitude+","+count);
cursor.moveToNext();
}
}
return locations;
}发布于 2018-12-04 19:25:51
我相信您的问题是,SQLite中没有布尔类型(不是MySQL),因此不能使用。相反,您必须以另一种方式指示和测试真或假。
2.1。布尔数据类型SQLite没有单独的布尔存储类。相反,布尔值存储为整数0 (false)和1 (true)。
最有效的方法是将一个值赋值给currnet,即1 ( true )或0 (false),然后使用WHERE currnet <> 0来反映真。
如果考虑到以下情况,则当前设置为1或0 :-
DROP TABLE IF EXISTS checked_in;
CREATE TABLE IF NOT EXISTS checked_in (longitude REAL, latitude REAL, currnet INTEGER);
INSERT INTO checked_in VALUES
(100.10,200.10,1),(100.10,200.10,0),(100.10,200.10,1),
(120.10,200.10,1),(120.10,200.10,0),(120.10,200.10,1),
(120.10,210.10,1),(120.10,210.10,1),(120.10,210.10,1),
(130.10,200.10,0),(130.10,200.10,0),(130.10,200.10,0),
(140.10,200.10,1),(140.10,200.10,0),(140.10,200.10,0)
;
SELECT * FROM checked_in;该表全文如下:-

如果您然后考虑查询,它将解析为:-
SELECT LATITUDE, LONGITUDE,COUNT(*) FROM CHECKED_IN WHERE currnet = true GROUP BY LATITUDE, LONGITUDE;这失败是因为true不是SQLite关键字,然后被视为列名,例如:-
> no such column: true但是,如果您使用的是:
SELECT LATITUDE, LONGITUDE,COUNT(*) FROM checked_in WHERE currnet <> 0 GROUP BY LATITUDE, LONGITUDE;结果是:-

因此,您需要根据SQLite而不是MySQL SQL使用它。如果您使用了BOOL或布尔值的列类型,这本身并不是一个问题,因为SQLite具有灵活性。但是,不能使用TRUE或FALSE进行比较。否则,您的代码似乎没有问题。
https://stackoverflow.com/questions/53612981
复制相似问题