Hen*_*rik 5 postgresql jdbc clojure
使用 org.clojure/java.jdbc“0.7.11”和 PostgreSQL 11.5
似乎 return-keys 选项仅返回第一行作为映射,而不是完整列表
例子:
(jdbc/execute!
db
"INSERT INTO test_table(letter) VALUES ('A'), ('B');"
{:return-keys ["letter"]})
=> {:letter "A"}
Run Code Online (Sandbox Code Playgroud)
我希望得到的回报会是这样的({:letter "A"} {:letter "B"})
两行均已毫无问题地插入到数据库中。
我知道我可以使用 insert-multi 来执行此操作并取回行,但我真正想做的是更新,因此它需要执行,只是认为这是显示问题的最简单方法。
有谁知道为什么我只返回一行键,有没有办法返回所有行?
我想你可能需要的是:
(jdbc/execute!
db
["INSERT INTO test_table(letter) VALUES (?)"
["A"] ["B"]]
{:return-keys ["letter"] :multi? true})
Run Code Online (Sandbox Code Playgroud)
指定:multi? true会导致库使用.executeBatch而不是,.executeUpdate并且您应该返回多个结果。
如果你使用next.jdbc它,就不会出现这个问题:
(next.jdbc/execute!
db
["INSERT INTO test_table(letter) VALUES ('A'), ('B')"]
{:return-keys ["letter"]})
Run Code Online (Sandbox Code Playgroud)
这应该返回两个插入的键。
请注意,它clojure.java.jdbc被视为“稳定”,这意味着它不再获得新功能。next.jdbc所有当前和未来的开发工作都将在此时进行(部分原因是上述问题)。next.jdbc是从未有过的 1.0 版本clojure.java.jdbc。
https://github.com/seancorfield/next-jdbc