我正在开发的应用程序开始变得迟钝。它变得迟钝的原因之一是应用程序的一部分存储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);
答案 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方法。额外的一个参数是限制条款。这应该可以解决您的问题。