Clojure contrib sql使所有数字都成为BigDecimal

时间:2010-09-15 10:46:47

标签: clojure clojure-contrib

clojure.contrib.sql库为所有数字字段返回BigDecimals。将某些字段作为整数的好方法是什么?示例代码如下:

(sql/with-connection my-db 
   (sql/with-query-results res 
      [sql-str 6722] 
      (into [] res)))

在生成的记录集合中,所有数字都是BigDecimal。其中一些是外键,出于我自己的原因,我需要它们是整数。

我知道我可以遍历集合并转换它们,但我宁愿不这样做,因为它是一个非常大的集合,如果数字适合整数,那么让库使用ResultsSet.getInteger似乎是正确的。

DB是Oracle,整数DB字段定义为NUMBER(10)

由于

1 个答案:

答案 0 :(得分:3)

正如atreyu所指出的,10位整数不一定适合Integer

更重要的是,您获得的序列由clojure.core/resultset-seq创建,而BigDecimals又调用ResultSet.getObject(int)。根据JDBC规范,返回map,因为这是与列的SQL类型对应的java类型。

此外,您不必担心“集合上的iterat [ing]”。 resultset-seq是懒惰的,而{{1}}是懒惰的,因此您最终会在使用它们之前转换每个数字。如,

(sql/with-connection my-db 
   (sql/with-query-results res 
      [sql-str 6722] 
      (do-stuff 
         (map (comp int :id) res))))