postgresql - clojure:如何将 jdbc4array 转换为 clojure 的 seq?

标签 postgresql clojure seq

我尝试使用 jdbc 从数据库中查询数据。问题是某些列是数组类型。

;get that particular column
(def jdbc-array (with-connection *db*                                                                    
                  (with-query-results rs ["select * from refgene limit 5"]                                        
                    (:exonstarts (first rs)))))

;Check if it has a value
(print jdbc-array)
;#<Jdbc4Array {67075873,67078739,67085754,67100417,67109640,67113051,67129424,67131499,67143471,67162932}>nil

;check class
(class jdbc-array)
;org.postgresql.jdbc4.Jdbc4Array

如何在 clojure 中将此数组转换为 seq/vector?我尝试了 (seq jdbc-array) 和 (seq (.getArray jdbc-array) 但两者都不起作用...

最佳答案

如果 with-connection 选项对您来说很笨重(对我来说就是这样),您可以扩展 IResultSetReadColumn 协议(protocol)以将 Jdbc4Array 对象转换为常规对象或向量:

这是一种方法:

(extend-protocol clojure.java.jdbc/IResultSetReadColumn
  org.postgresql.jdbc4.Jdbc4Array
  (result-set-read-column [pgobj metadata i]
    (vec (.getArray pgobj))))

这将在读取时将所有数组类型转换为向量

这种方法也可以帮助处理 JSON 数据类型,如 this example

关于postgresql - clojure:如何将 jdbc4array 转换为 clojure 的 seq?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6055629/

相关文章:

c++ - 无法使用 C++ 连接到 PostgreSQL

sql - 计算sql中多列的平均值/标准差

c - 在 Mavericks (OS X 10.9) 上开发 PostgreSQL

java - 在 Java 对象树上创建的 Clojure zipper 可以在 zip-filter 中工作吗?

c# - 估计从 SQL 返回的数据集的大小

c# - Serilog 序列化字段

sql - Postgres 使用其他表插入冲突更新

Clojure:将 HashMap 键字符串转换为关键字?

vector - 在 clojure 中,通过内核对向量进行卷积的有效方法是什么?

range - 我应该在 Perl 6 中用序列还是范围来计数?