我正在使用PostgreSQL 9.4和强大的JSONB字段类型。 我正在尝试针对文档中的字段进行查询。以下内容在psql CLI中有效:
SELECT id FROM program WHERE document -> 'dept' ? 'CS'
当我尝试通过我的Scala应用程序运行相同的查询时,出现了以下错误。我正在使用Play框架和Anorm,因此查询看起来像这样:
SQL(s"SELECT id FROM program WHERE document -> 'dept' ? {dept}")
.on('dept -> "CS")
....
SQLException: : 未为参数5指定值。 (SimpleParameterList.java:223)
(在我的实际查询中有更多的参数)
我可以通过将我的参数转换为 jsonb
类型,并使用 @>
运算符来检查包含关系来解决此问题。
SQL(s"SELECT id FROM program WHERE document -> 'dept' @> {dept}::jsonb")
.on('dept -> "CS")
....
我不太喜欢这种解决方法。虽然我不知道强制类型转换是否会影响性能,但它需要额外的输入,并且不是很明显。
还有其他可以做的吗?
SQL(s"SELECT id FROM program WHERE document -> 'dept' ? {dept} .on('dept -> "CS")
→on
必须应用于SQL(...)
,而不是作为语句字符串的一部分,就像它似乎在那里 =SQL("...").on(...)
. 请注意,那里的字符串插值是无用的。 - cchantepon
之后有一个对apply
的调用。 - Jason??
。请参见http://www.postgresql.org/message-id/CADK3HH+Fbr4+TBrpmK7pSbVkBei7pHmB99ANU_Km1HnjCEmO6w@mail.gmail.com - tiguchi