【问题标题】:Postgresql array comparision with List input Dropwizard JDBIPostgresql 数组与 List 输入 Dropwizard JDBI 的比较
【发布时间】:2018-08-13 00:49:35
【问题描述】:

我的问题与此类似

PostgreSQL check if array contains any element from left-hand array

但我想通过代码执行(与上述问题中给出的相同查询),即“&& 运算符”查询。 Dropwizard + JDBI 框架。

@SqlQuery("SELECT ARRAY[1,2,3,4] && <input_array>")
public abstract Object query(@BindIn("input_array") List<Integer> list);

@BindIn 注释不起作用。出现以下错误。

! org.postgresql.util.PSQLException: ERROR: operator does not exist: 
integer[] && integer
!   Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
!   Position: 41
! at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270)
! at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998)
! at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
! at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570)
! at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:420)
! at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:413)
! at org.skife.jdbi.v2.SQLStatement.internalExecute(SQLStatement.java:1327)
! ... 75 common frames omitted
! Causing: org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException: org.postgresql.util.PSQLException: ERROR: operator does not exist: integer[] && integer
!   Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
!   Position: 41 [statement:"SELECT ARRAY[1,2] && <input_array>", located:"SELECT ARRAY[1,2] && :__input_array_0,:__input_array_1", rewritten:"/* Monoliths.query */ SELECT ARRAY[1,2] && ?,?", arguments:{ positional:{}, named:{__input_array_1:3,__input_array_0:2}, finder:[]}]
! at org.skife.jdbi.v2.SQLStatement.internalExecute(SQLStatement.java:1338)
! at org.skife.jdbi.v2.Query.fold(Query.java:173)
! at org.skife.jdbi.v2.Query.first(Query.java:273)
! at org.skife.jdbi.v2.Query.first(Query.java:264)
! at org.skife.jdbi.v2.sqlobject.ResultReturnThing$SingleValueResultReturnThing.result(ResultReturnThing.java:110)
! at org.skife.jdbi.v2.sqlobject.ResultReturnThing.map(ResultReturnThing.java:46)
! at org.skife.jdbi.v2.sqlobject.QueryHandler.invoke(QueryHandler.java:41)
! at org.skife.jdbi.v2.sqlobject.SqlObject.invoke(SqlObject.java:224)
! at org.skife.jdbi.v2.sqlobject.SqlObject$3.intercept(SqlObject.java:133)

请指导我,我是 Dropwizard - JDBI 和 PostgreSQL 的新手。

Above method is called as 
    List<Integer> list = new ArrayList<>();
    list.add(2);
    list.add(3);
    query(list);

Dropwizard 版本 - 1.1.0

Java 8

【问题讨论】:

  • 我不知道这些工具,所以帮不上什么忙,但我可以确认它绑定的是单个元素而不是数组,就好像你写的是 SELECT ARRAY[1,2,3] &amp;&amp; 3; 而不是 SELECT ARRAY[1,2,3] &amp;&amp; ARRAY[2,3]; 也许有些东西是“通过解包外部数组来帮助”?

标签: java postgresql dropwizard jdbi


【解决方案1】:

我认为你应该尝试这样的事情:

@SqlQuery("SELECT ARRAY[1,2,3,4] && ARRAY[<input_array>]::integer[]")
public abstract Object query(@BindIn("input_array") List<Integer> list);`

【讨论】:

    猜你喜欢
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 2020-10-04
    相关资源
    最近更新 更多