缓慢的Android应用程序...如何限制SQL查询

时间:2011-11-27 22:56:08

标签: android sql

我正在开发的应用程序开始变得迟钝。它变得迟钝的原因之一是应用程序的一部分存储gps坐标。我查找了如何限制SQL查询中的记录数。我找到了this。当我在我的代码中输入命令限制时,我收到错误。这是我试过的代码:

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);

4 个答案:

答案 0 :(得分:7)

由于这个问题仍未提供适当的解决方案,我想清理一下。

user658042和Jan Dragsbaek所说的大部分内容都是正确的。有一个重载方法,为你的limit子句提供第8个参数,它也必须是一个字符串。

由于LIMIT可以使用或不使用偏移量,因此可以在SQL中将其写为

LIMIT 1000 // limit to 1000 entries

或带偏移量

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

主要是,这就是为什么查询方法中的limit参数必须作为字符串传递的原因。

总而言之,只需在限制参数中省略文本“LIMIT”就可以了:)

// 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");

答案 1 :(得分: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");

答案 2 :(得分: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");

Jan Dragsbaek的回答也是正确的,限制子句是一个字符串,所以你也必须把它放在引号中。

答案 3 :(得分:0)

问题在于query方法的结构。它需要7个参数。最后一个参数是order by子句。当你在order by子句放置字符串“LIMIT 1000”时。 query方法为您ORDER BY提供了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"); 个字。因此,make SQL Exception。

因此,要修复它,您需要以这种方式提出查询。

{{1}}

一项小小的研究指出我使用8个参数的query方法。额外的一个参数是限制条款。这应该可以解决您的问题。