相关疑难解决方法(0)

JDBC规范是否阻止'?' 从被用作运营商(在报价之外)?

来自Sam Macbeth的问题:

JDBC规范中有什么允许的吗?要转义并且不是参数占位符?

例如,Postgres允许您?用作运算符:

SELECT * FROM tbl WHERE tbl.data ? 'abc'
Run Code Online (Sandbox Code Playgroud)

JDBC驱动程序可以让你使用吗?作为运营商仍然是符合JDBC的?

sql postgresql specifications jdbc

16
推荐指数
3
解决办法
3139
查看次数

PostgreSQL jsonb,`?`和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)

我不太热衷于工作.我不知道演员阵容是否有性能损失,但这是额外的打字,并且不明显.

还有什么我可以做的吗?

postgresql jdbc anorm jsonb

5
推荐指数
2
解决办法
4690
查看次数

标签 统计

jdbc ×2

postgresql ×2

anorm ×1

jsonb ×1

specifications ×1

sql ×1