我使用日期格式的字符串比较来删除数据库中的记录。我想删除过去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)
日志显示:0记录被删除.
更新:
在SQLite中将日期字段从文本转换为Long之后。
myddatabase.delete("mytable", "date > datetime('now','-5 minutes') AND date < datetime('now') ", null);
不过,它并没有删除任何记录。为什么?
发布于 2013-07-25 11:01:14
试试这个:
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分钟,因此是唯一剩下的行。
发布于 2013-07-25 10:57:11
首先,在您看来,它是试图对字符串执行数学操作--这不会导致您所认为的结果--因此您当前的困境。
使用时间(以毫秒为单位)来完成的几乎所有方面都会更好:性能、简单性和允许本机db引擎为您完成工作。通过将其存储为字符串,可以防止db引擎执行通常与日期进行的任何类型的比较。第二,存储为字符串是对空间的极大浪费,Android在手机上的存储量是有限的。
如果您使用代码中的时间值,则需要一个long,而不是整数--如果您试图将时间值以毫秒为单位推到整数中,则肯定会使缓冲区溢出。
https://stackoverflow.com/questions/17865902
复制