如何从 Derby 数据库中获取在最后 30 秒内插入的条目?
Posted
技术标签:
【中文标题】如何从 Derby 数据库中获取在最后 30 秒内插入的条目?【英文标题】:How do you get entries from a Derby database that were inserted during the last 30 seconds? 【发布时间】:2012-06-10 09:52:55 【问题描述】:我是 Derby 的新手(基本上是一般的数据库),我正在尝试使用 Java 通过 Eclipse 来体验 Derby。
我要做的是从生成报告后的最后 30 秒内生成当前在 Derby 数据库中的所有条目的报告。
我设法在 mysql 中得到了我想要的东西:
SELECT * FROM table WHERE datetime > (now() - 间隔 30 秒)
在 Derby 中是否有等效或类似的功能?
【问题讨论】:
【参考方案1】:很遗憾,Derby 不支持标准 (ANSI) SQL 日期算法。您需要使用 JDBC 转义函数:
c:\db-derby-10.8.2.2\bin>ij
ij version 10.8
ij> connect 'jdbc:derby:c:/temp/sotest';
ij> create table foo (datetime timestamp);
0 rows inserted/updated/deleted
ij> insert into foo values (current_timestamp);
1 row inserted/updated/deleted
ij> commit;
ij> select *
from foo
where datetime > fn timestampadd(SQL_TSI_DAY, -10, current_timestamp);
> > DATETIME
-----------------------------
2012-06-10 12:32:48.859
1 row selected
ij>
有关函数的完整列表,请参阅参考手册:http://db.apache.org/derby/docs/10.8/ref/rrefjdbc88908.html
【讨论】:
我之前实际上尝试过使用此命令,但我一直收到以下错误:INTEGER is an invalid type for argument number 2 of TIMESTAMPDIFF. @Stephen:它对我有用。您需要向我们展示产生该错误的代码(并请包括表格的定义) 没问题,这里是:SELECT * FROM app.user_count WHERE datetime > fn timestampdiff(SQL_TSI_SECOND, -30, CURRENT_TIMESTAMP); @Stephen:正如我所说:那个确切的陈述对我有用(见我的编辑)。显然有些事情你没有告诉我们。 感谢您的编辑,它看起来确实适合您。不知道为什么它对我不起作用,但这是我输入时的输出:pastebin.com/88fa3Nt3以上是关于如何从 Derby 数据库中获取在最后 30 秒内插入的条目?的主要内容,如果未能解决你的问题,请参考以下文章
从 Derby 获取 PreparedStatement 查询
ORA-01722: 尝试在接下来 30 秒内获取预定信号的 Oracle 查询中的无效数字