我是Clojure的新手,我正在使用Clojure,Compojure和带有POSTGRES数据库的java.jdbc创建一个小型Web API。
我的一个表包含一个整数数组作为其列之一,并定义如下:
(sql/create-table-ddl
:games
[:id :serial "PRIMARY KEY"]
[:active :BOOLEAN "NOT NULL"]
[:players "integer[]" "DEFAULT array[]::integer[]"]
[:player_order "integer[]" "DEFAULT array[]::integer[]"]
[:created_at :timestamp
"NOT NULL" "DEFAULT CURRENT_TIMESTAMP"])
我正在尝试查询整数[]之一:
(sql/query postgres [(str "SELECT * FROM games WHERE id=" game-id)])
但是POSTGRES返回一个Jdbc4Array(而不是vec):
:player_order #<Jdbc4Array {1,2,3,4}
org.postgresql.jdbc4.Jdbc4Array
我似乎无法弄清楚如何将其变成Clojure vec。我已经看过一些例子,但他们似乎正在使用我不是的流。我不正确地进行此查询吗?我如何将其转换为Clojure vec?
答案 0 :(得分:1)
Jdbc4Array
实施java.sql.Array
;我没有PG数据库或调用代码,但根据java.sql.Array
的文档,您应该可以致电:
(into [] (.getArray your-val))
但是,您不必在整个代码中手动执行此操作。您可以通过将Jdbc4Array
协议扩展到clojure.java.jdbc/IResultSetReadColumn
来自动完成从java.sql.Array
到Vector的转换。
这已在StackOverflow上演示过:
https://stackoverflow.com/a/25786990/152739
(我不想逐字复制那个家伙的答案!)