【发布时间】:2015-02-18 20:17:56
【问题描述】:
我正在使用 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(...)。注意那里的字符串插值是没用的。 -
我没有将整个调用粘贴到 SQL,因为它与我的问题无关。在
on之后有一个对apply的调用 -
如果您想要适当的答案,我会更好地粘贴具有有效语法的代码。
-
最新的 JDBC 驱动程序中似乎有一个修复程序,允许通过加倍来转义问号:
??。见postgresql.org/message-id/…
标签: postgresql jdbc anorm jsonb