我在日期格式上使用字符串比较来删除数据库中的记录。我想删除过去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记录被删除...
更新:
在SQLite中将日期字段从Text转换为Long。
myddatabase.delete("mytable", "date > datetime('now','-5 minutes') AND date < datetime('now') ", null);
仍然不会删除任何记录。为什么?
答案 0 :(得分:1)
对于初学者来说,你似乎正在尝试对字符串执行数学运算 - 这不会导致你认为它会产生什么 - 从而导致你目前的困境。
使用毫秒级的时间几乎可以完成您想要完成的任何方面的改进:性能,简单性并允许本机数据库引擎为您完成工作。通过存储为字符串,可以防止数据库引擎执行您通常使用日期进行的任何比较。其次,存储为字符串是一种可怕的空间浪费,Android在手机上的数量有限。
如果使用代码中的时间值,则需要长而不是整数 - 如果您尝试将时间值(以毫秒为单位)推送到整数,则肯定会溢出缓冲区。
答案 1 :(得分:1)
试试这个:
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分钟内从删除中排除,因此是唯一剩余的行。