2011-11-27 47 views
0

我正在工作的應用程序開始變得呆滯。其緩慢的原因之一是應用程序的一部分存儲GPS座標。我查了一下如何限制sql查詢中的記錄數。我發現this。當我在我的代碼中輸入命令限制時,出現錯誤。以下是我試過的代碼:呆滯的Android應用程序...我如何限制一個SQL查詢

return mDb.query(DATABASE_TABLE, new String[]{KEY_ROWID, KEY_TITLE, 
       KEY_BODY, KEY_LAT, KEY_LONGI, KEY_DATE}, null, null, null, null,LIMIT 1000); 
+1

好了,告訴我們是什麼錯誤,那麼方法。 –

+0

@Graham Borland它的一個語法錯誤 –

+0

爲了防止你想知道,在實際查詢中,'limit' SQL子句將如下所示:'select * from table_name where active = true limit 1000;'。 (如果你理解它在現實中的工作原理,它可能會使它更容易理解和解決。) –

回答

1

通過將最後一個參數放在引號中。

return mDb.query(DATABASE_TABLE, new String[]{KEY_ROWID, KEY_TITLE, KEY_BODY, KEY_LAT, KEY_LONGI, KEY_DATE}, null, null, null, null,"LIMIT 1000"); 
+0

這拋出了一個語法錯誤 –

+0

多數民衆贊成那是因爲它被分成兩行,我更新後,它是在一行。 –

+0

同樣的錯誤,它在一行上全部變爲 –

0

您使用帶有7個參數的query()方法。唯一的query-method that has 7 arguments沒有限制條款。有機會,你要使用this one代替,這意味着你必須限制條款前增加另一個null

return mDb.query(DATABASE_TABLE, 
       new String[]{ KEY_ROWID, KEY_TITLE, KEY_BODY, KEY_LAT, 
           KEY_LONGI, KEY_DATE}, 
       null, null, null, null, null, "LIMIT 1000"); 

從一月Dragsbaek答案也是正確的,限制條款是一個字符串,所以你必須也把它放在引號中。

+1

「LIMIT 1000」引發無效的LIMIT子句錯誤。我是否正確的路徑將查詢限制爲1000條記錄? –

0

問題是與query方法的結構。它需要7個參數。最後一個參數是order by子句。當你通過子句放置一個字符串「LIMIT 1000」時。 query方法寄存給你ORDER BY單詞。因此,使SQL異常。

因此,要解決這個問題,您需要以這種方式提出您的查詢。

return mDb.query(DATABASE_TABLE, new String[]{KEY_ROWID, KEY_TITLE, 
       KEY_BODY, KEY_LAT, KEY_LONGI, KEY_DATE}, null, null, null, null,"null LIMIT 1000"); 

一些研究指出我query方法與參數8。額外的一個參數是限制條款。這應該可以解決你的問題。

7

由於這個問題仍然沒有提供一個適當的解決方案,我想澄清事情。

user658042和Jan Dragsbaek所說的很多都是正確的。有一個重載的方法,爲你的限制條款提供第8個參數,它也必須是一個字符串。

由於LIMIT可以具有或不具有偏移來使用的,所以可以將它寫在SQL作爲

LIMIT 1000 // limit to 1000 entries

或具有偏移

LIMIT 5000, 1000 // limit to 1000 entries with an offset of 5000

主要是,即查詢方法中的限制參數必須作爲字符串傳遞的原因。

總之,只要省略文本「限制」在你的極限參數是去:)

// limit to 1000 entries 
return mDb.query(DATABASE_TABLE, 
       new String[]{ KEY_ROWID, KEY_TITLE, KEY_BODY, KEY_LAT, 
       KEY_LONGI, KEY_DATE}, 
       null, null, null, null, null, "1000"); 

// limit to 1000 entries with an offset of 5000 
return mDb.query(DATABASE_TABLE, 
       new String[]{ KEY_ROWID, KEY_TITLE, KEY_BODY, KEY_LAT, 
       KEY_LONGI, KEY_DATE}, 
       null, null, null, null, null, "5000, 1000"); 
+0

諷刺*愛Android文檔包括這個細節* – clu

相關問題