将 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)
....)
我试图将字符串数组传递给 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)
....)