【问题标题】:Clojure java.jdbc return-keys option only returns one rowClojure java.jdbc return-keys 选项只返回一行
【发布时间】:2020-06-28 22:24:43
【问题描述】:

使用 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"}

我希望得到的返回类似于({:letter "A"} {:letter "B"})

两行都没有问题地插入到数据库中。

我知道我可以使用 insert-multi 来执行此操作并取回行,但我在这里真正想做的是更新,所以它需要执行,只是认为这是最简单的方法显示问题。

有谁知道为什么我只返回一行键,有没有办法返回所有行?

【问题讨论】:

    标签: postgresql jdbc clojure


    【解决方案1】:

    我想你可能需要的是:

    (jdbc/execute!
      db
      ["INSERT INTO test_table(letter) VALUES (?)"
       ["A"] ["B"]]
      {:return-keys ["letter"] :multi? true})
    

    指定:multi? true 会导致库使用.executeBatch 而不是.executeUpdate,您应该会返回多个结果。

    如果你改用next.jdbc,就不会出现这个问题:

    (next.jdbc/execute!
      db
      ["INSERT INTO test_table(letter) VALUES ('A'), ('B')"]
      {:return-keys ["letter"]})
    

    这应该返回两个插入的键。

    请注意,clojure.java.jdbc 被认为是“稳定的”,这意味着它不再获得新功能。此时所有当前和未来的开发工作都将进入next.jdbc(部分原因是上述问题)。 next.jdbcclojure.java.jdbc 从未有过的 1.0 版本。

    https://github.com/seancorfield/next-jdbc

    【讨论】:

    • 非常感谢,成功了。将来会看看 next.jdbc,谢谢。
    猜你喜欢
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2019-08-16
    • 1970-01-01
    相关资源
    最近更新 更多