使用OrmLite在Sqlite中组合删除语句的帮助很小

时间:2011-07-06 10:06:12

标签: android sql sqlite ormlite

我在Android应用程序中放置删除语句时遇到问题(我使用的是OrmLite)。

我有一张充满记录的表格。其中两个字段是&#34; dateCreated&#34; (type Date)和&#34; imageSize&#34; (type int)。在我的代码中,我有一个方法free(int size)。这个方法告诉我,我必须从表中删除最旧的记录,即&#34; imageSize&#34; <=大小。

例如..我得到参数1000.每个记录都有值让100说。这意味着我必须删除10个最旧的记录。

有人可以为我提供最佳的原始SQL语句,或者更好的OrmLite代码吗?

我会非常感激。

2 个答案:

答案 0 :(得分:1)

不幸的是,您无法使用单个SQL语句执行此操作。没有办法说

  

选择记录,直到它们的总和小于X

您可以执行多个查询,直到找到总和小于X的最旧记录,但这需要多次单独的SQL调用。

我建议选择最后X个图像及其尺寸,然后使用DELETE ... IN ...删除正确数量的图像。这是伪代码:

while (true) {
   SELECT id, imageSize FROM yourtable ORDER BY dateCreated DESC LIMIT 10;
   find the images from the bottom whose sum(imageSize) <= parameter
   delete the found images
   break if you exceed the parameter otherwise loop and get the next 10
}

答案 1 :(得分:0)

试试这个,

DELETE FROM yourtable WHERE imageSize <= (SELECT SUM(ImageSize) FROM yourtable)

为您的功能使用相同的参数