首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除SQL中的记录

删除SQL中的记录
EN

Stack Overflow用户
提问于 2013-07-25 18:25:33
回答 2查看 137关注 0票数 0

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

代码语言:javascript
运行
复制
     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之后。

代码语言:javascript
运行
复制
myddatabase.delete("mytable", "date > datetime('now','-5 minutes') AND date < datetime('now') ", null);

不过,它并没有删除任何记录。为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-25 19:01:14

看看sqlite日期函数

试试这个:

代码语言:javascript
运行
复制
myddatabase.delete("mytable", "dateCol > datetime('now','-5 minutes') AND dateCol < datetime('now') ", null);

其中dateCol是日期列的名称

编辑:

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

代码语言:javascript
运行
复制
 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分钟,因此是唯一剩下的行。

票数 1
EN

Stack Overflow用户

发布于 2013-07-25 18:57:11

首先,在您看来,它是试图对字符串执行数学操作--这不会导致您所认为的结果--因此您当前的困境。

使用时间(以毫秒为单位)来完成的几乎所有方面都会更好:性能、简单性和允许本机db引擎为您完成工作。通过将其存储为字符串,可以防止db引擎执行通常与日期进行的任何类型的比较。第二,存储为字符串是对空间的极大浪费,Android在手机上的存储量是有限的。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17865902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档