Android development with sqlite: query result shouldn't be empty

℡╲_俬逩灬. 提交于 2019-12-20 06:38:15

问题


I have a rather big query that is returning data when executed outside android while returning nothing when executed within android.

  • I split the query in several pieces and determined that the union was ok.
  • I tried on a smaller set of data with the same behavior.
  • I've tested with different hardware and API versions.
  • I'm using the rawQuery method with constant values. http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery(java.lang.String, java.lang.String[])

This query was meant to replace a FULL OUTER JOIN which is not currently supported.

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

Any hints would be greatly appreciated.

Update:

Look's like the problem is finally with the query parameters, if I set it this way:

String[] args = new String[3];
args[0] = args[1] = args[2] = "1"; 
Cursor data dataBase.rawQuery(SELECT_POINTS, args);

It doesn't work, while it works when hardcoding values directly in the query.

Cursor data = dataBase.rawQuery(SELECT_POINTS, null);

回答1:


In the Android database API, all query parameters are strings. (This is a horrible design mistake.)

Your query corresponds to:

... AND sp.route='1'

Try to convert the parameter strings back into a number like this:

... AND sp.route = CAST(? AS INT)

or just put the number directly into the query string.



来源:https://stackoverflow.com/questions/16172915/android-development-with-sqlite-query-result-shouldnt-be-empty

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!