0
我有一个相当大的查询,当在android外部执行时返回数据,而在android中执行时没有返回任何内容。Android开发与SQLite的:查询结果不应该是空的
- 我把这个查询分成几部分,确定工会没问题。
- 我尝试了一组具有相同行为的较小数据。
- 我测试过不同的硬件和API版本。
- 我使用带有常量值的rawQuery方法。 http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery(java.lang.String, java.lang.String[])
此查询是为了替换当前不支持的FULL OUTER JOIN。
SELECT IFNULL(stype, gtype) AS type, IFNULL(sdate, gdate) AS date, IFNULL(sroute, groute) AS route FROM (
SELECT sp.type AS stype, sp.date AS sdate, -1 AS gtype, gp.date AS gdate, sp.route AS sroute, gp.route AS groute
FROM Sensor_Point AS sp LEFT JOIN GPS_Point AS gp ON gp._id IS NULL AND sp.sent=0 AND sp.route=gp.route AND sp.route=1
UNION ALL
SELECT sp.type AS stype, sp.date AS sdate, -1 AS gtype, gp.date AS gdate, sp.route AS sroute, gp.route AS groute
FROM GPS_Point AS gp LEFT JOIN Sensor_Point AS sp ON sp._id IS NULL AND gp.sent=0 AND sp.route=gp.route AND gp.route=1
) WHERE route=1 ORDER BY date ASC LIMIT 255
任何提示将不胜感激。
更新:
看的像问题终于与查询参数,如果我这样设置:
String[] args = new String[3];
args[0] = args[1] = args[2] = "1";
Cursor data dataBase.rawQuery(SELECT_POINTS, args);
它不工作,而直接硬编码值时,工作在查询中。
Cursor data = dataBase.rawQuery(SELECT_POINTS, null);
非常感谢@CL。就是这个 !!我首先想到这个问题与嵌套查询有关,因为子查询没有任何投射就能正常工作,但我错了。 – annoyed 2013-04-24 08:11:20