删除SQL中的记录

时间:2013-07-25 18:25:33

标签: android sql sqlite

我在日期格式上使用字符串比较来删除数据库中的记录。我想删除过去5分钟的数据。 这是我正在使用的代码。它似乎不起作用。它不会删除任何记录。为什么?

     int rangeInMinutes = -5;
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                Calendar now = Calendar.getInstance();
                Calendar range = Calendar.getInstance();

                range.add(Calendar.MINUTE, rangeInMinutes);

  queryString.append(range);
 StringBuilder queryString = new StringBuilder("date("'"+now +"'") > date("'"+range+"'");
int c = mydatabase.delete("mytable",  queryString.toString(), null)

logcat显示:0记录被删除...

  • 我以String格式存储日期。

更新:

在SQLite中将日期字段从Text转换为Long。

myddatabase.delete("mytable", "date > datetime('now','-5 minutes') AND date < datetime('now') ", null);

仍然不会删除任何记录。为什么?

2 个答案:

答案 0 :(得分:1)

对于初学者来说,你似乎正在尝试对字符串执行数学运算 - 这不会导致你认为它会产生什么 - 从而导致你目前的困境。

使用毫秒级的时间几乎可以完成您想要完成的任何方面的改进:性能,简单性并允许本机数据库引擎为您完成工作。通过存储为字符串,可以防止数据库引擎执行您通常使用日期进行的任何比较。其次,存储为字符串是一种可怕的空间浪费,Android在手机上的数量有限。

如果使用代码中的时间值,则需要而不是整数 - 如果您尝试将时间值(以毫秒为单位)推送到整数,则肯定会溢出缓冲区。

答案 1 :(得分:1)

查看sqlite date function

试试这个:

myddatabase.delete("mytable", "dateCol > datetime('now','-5 minutes') AND dateCol < datetime('now') ", null);

其中dateCol是日期列的名称

修改

以下是测试上面where子句的输出:

 sqlite> create table test (_id int, testdate string);
create table test (_id int, testdate string);
sqlite> insert into test values(1, datetime('now'));
insert into test values(1, datetime('now'));
sqlite> insert into test values(2, datetime('now'));
insert into test values(2, datetime('now'));
sqlite> insert into test values(3, datetime('now'));
insert into test values(3, datetime('now'));
sqlite> insert into test values(4, datetime('now', '-10 minutes'));
insert into test values(4, datetime('now', '-10 minutes'));
sqlite> select * from test;
select * from test;
1|2013-07-25 21:01:05
2|2013-07-25 21:01:07
3|2013-07-25 21:01:09
4|2013-07-25 20:51:12
sqlite> select * from test where testdate < datetime('now') and testdate > datet
ime('now', '-5 minutes');
select * from test where testdate < datetime('now') and testdate > datetime('now
', '-5 minutes');
1|2013-07-25 21:01:05
2|2013-07-25 21:01:07
3|2013-07-25 21:01:09
sqlite> delete from test where testdate < datetime('now') and testdate > datetim
e('now', '-5 minutes');
delete from test where testdate < datetime('now') and testdate > datetime('now',
 '-5 minutes');
sqlite> select * from test;
select * from test;
4|2013-07-25 20:51:12
sqlite>

_id 4在过去的10分钟内从删除中排除,因此是唯一剩余的行。