将 clojure vec 传递给 POSTGRES IN 语句(?)

Passing clojure vec to POSTGRES IN statement (?)

我试图将字符串数组传递给 select 语句,但我不断收到错误消息:

 org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of clojure.lang.PersistentVector. Use setObject() with an explicit Types value to specify the type to use.

我知道列类型是正确的,看起来传递向量是罪魁祸首。正确的做法是什么?

sql 语句的格式如下:

"SELECT * FROM said_table WHERE item_id IN (?)"

此答案假设您使用的是 jdbc 而不是 korma 或类似的东西,并且需要直接生成 sql 而不是通过某些工具:

in 指令要求您为列表中的每一项创建一个 ?。当其他事情需要我手动构建 SQL 时,我最终使用了这种模式:

(let [placeholders (s/join ", " (repeat (count things-go-here) "?"))
      query "SELECT * FROM said_table WHERE item_id IN (%s)"]
    (exec-raw [(format query placeholders) things-go-here] :results)
    ....)