0

我对日期格式使用字符串比较来删除数据库中的记录。我想删除过去 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);

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

4

2 回答 2

1

对于初学者来说,您似乎正在尝试对字符串执行数学运算-这不会导致您认为的结果-因此是您当前的困境。

你会在几乎每一个方面都以毫秒为单位尝试完成工作:性能、简单性并允许本地数据库引擎为你完成工作。通过存储为字符串,您可以防止 db 引擎进行任何类型的比较,而您通常会对日期进行比较。其次,以字符串的形式存储是非常浪费空间的,Android 一开始在手机上的空间有限。

如果您在代码中使用时间值,您将需要一个long而不是整数 - 如果您尝试以毫秒为单位将时间值推入整数,您肯定会溢出缓冲区。

于 2013-07-25T18:57:11.407 回答
1

看看sqlite 日期函数

尝试这个:

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-25T19:01:14.090 回答