2013-04-23 58 views
0

我有一個相當大的查詢,當在android外部執行時返回數據,而在android中執行時沒有返回任何內容。Android開發與SQLite的:查詢結果不應該是空的

此查詢是爲了替換當前不支持的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); 

回答

0

在Android數據庫API中,所有查詢參數都是字符串。 (這是一個可怕的設計錯誤。)

您的查詢對應於:

... AND sp.route='1' 

嘗試將參數字符串轉換回一批這樣的:

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

或只是把數字直接放入查詢字符串中。

+0

非常感謝@CL。就是這個 !!我首先想到這個問題與嵌套查詢有關,因爲子查詢沒有任何投射就能正常工作,但我錯了。 – annoyed 2013-04-24 08:11:20