jdbi @sqlquery:无法确定参数$ 1的数据类型

时间:2017-03-04 19:15:05

标签: sql postgresql jdbi

我正在尝试将可选/可空参数添加到我的sql查询中。

@SqlQuery("select * from temp where param1 = :param1")
List<Temp> findValues(@Bind("param1") String param1)

问题:param可以为null。所以我尝试在sql查询中添加空检查。

SqlQuery("select * from temp where ( (:param1 is not null) and (param1 = :param1"))
这会引发以下错误: org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException:org.postgresql.util.PSQLException:错误:无法确定参数$ 1的数据类型

在我的问题中,我必须添加多个可以为空的params。 (可选过滤器)

注意coalesce(:param1, param1) = param1:不能正常工作。如果发送了param1,它会返回结果,其中value是param1值或null。

如何进行此空检查?或者有没有办法可以生成sql查询并将其作为字符串传递给@SqlQuery?

我到处寻找,但似乎无法找到解决方案。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果要将其用作可选过滤器,则可以使用@Define。使用@Define,可以定义要使用的模板引擎的属性(jdbi v2使用ST v3)。然后,您的示例将如下所示:

@SqlQuery("SELECT * FROM temp WHERE 1 = 1 <if(PARAM1)> AND param1 = :param1 <endif>)
List<Temp> findValues(@Define("PARAM1") @Bind("param1") String param1)

因此,以这种方式,如果param1的值为null,查询将类似于:

SELECT * FROM temp WHERE 1 = 1

否则:

SELECT * FROM temp WHERE 1 = 1 AND param1 = :param1
相关问题