Android 内で実行すると何も返さず、Android の外部で実行するとデータを返す、かなり大きなクエリがあります。
- クエリをいくつかの部分に分割し、結合が問題ないと判断しました。
- 同じ動作で小さなデータセットを試しました。
- さまざまなハードウェアと 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);