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

时间:2015-01-20 21:30:45

标签: java sql postgresql clojure interop

我试图将一个字符串数组传递给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(?)"

1 个答案:

答案 0 :(得分:1)

这个答案假设您正在使用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)
    ....)