0

我有一个奇怪的问题,我的查询如下所示。

String tokenQuery = "select id from table
                      where current_timestamp between
                 creation_time and (creation_time + interval '10' minute) 
                   and token = '"+Token+"'";

但是当我运行时jdbcTemplate.queryForLong(tokenQuery),无论如何,它总是抛出 EmptyDataAccessException。我在 Oracle 中执行这个我们不能将动态值附加到字符串然后将其作为查询传递并执行吗?可能是什么问题 ?

4

1 回答 1

0

我假设你得到的实际上是一个 EmptyResultDataAccessException。这个异常的 javadoc 说:

当预期结果至少有一行(或元素)但实际返回零行(或元素)时,引发数据访问异常。

这仅仅意味着查询执行得很好,并且应该返回一行,但不返回任何行。因此,没有行满足您的查询条件。

如果这是预期的,则捕获异常,或使用返回列表而不是返回单个值的方法。这样,您可以测试返回的列表是否为空。

也就是说,您应该使用参数化查询,而不是像您正在做的那样连接令牌。这将防止 SQL 注入攻击。例如,即使令牌包含引号,它也可以工作。

于 2013-05-04T12:16:34.377 回答