JDBC规范中有什么允许的吗?要转义并且不是参数占位符?
例如,Postgres允许您?用作运算符:
SELECT * FROM tbl WHERE tbl.data ? 'abc'
Run Code Online (Sandbox Code Playgroud)
JDBC驱动程序可以让你使用吗?作为运营商仍然是符合JDBC的?
我正在使用PostgreSQL 9.4和令人敬畏的JSONB字段类型.我试图查询文档中的字段.以下适用于psql CLI
SELECT id FROM program WHERE document -> 'dept' ? 'CS'
Run Code Online (Sandbox Code Playgroud)
当我尝试通过我的Scala应用程序运行相同的查询时,我收到以下错误.我正在使用Play框架和Anorm,所以查询看起来像这样
SQL(s"SELECT id FROM program WHERE document -> 'dept' ? {dept}")
.on('dept -> "CS")
....
Run Code Online (Sandbox Code Playgroud)
SQLException ::没有为参数5指定值.(SimpleParameterList.java:223)
(在我的实际查询中有更多参数)
我可以通过将我的参数转换为类型jsonb并使用@>运算符来检查包含来解决这个问题.
SQL(s"SELECT id FROM program WHERE document -> 'dept' @> {dept}::jsonb")
.on('dept -> "CS")
....
Run Code Online (Sandbox Code Playgroud)
我不太热衷于工作.我不知道演员阵容是否有性能损失,但这是额外的打字,并且不明显.
还有什么我可以做的吗?