我有一个奇怪的问题, 我的查询如下所示。
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中执行此操作
我们可以不将动态值附加到字符串,然后将其作为查询传递并执行吗?
可能是什么问题?
答案 0 :(得分:0)
我认为你得到的实际上是一个EmptyResultDataAccessException。这个例外的javadoc说:
当预期结果至少有一行(或元素)但实际返回零行(或元素)时,抛出数据访问异常。
这只是意味着查询执行正常,并且应该返回一行,但不返回任何行。因此,没有行符合您的查询条件。
如果需要,则捕获异常,或使用返回列表而不是返回单个值的方法。这样,您可以测试返回的列表是否为空。
那就是说,你应该使用参数化查询,而不是像你正在做的那样连接令牌。这可以防止SQL注入攻击。例如,即使令牌包含引号,它也会起作用。