2010-09-15 8 views
2

clojure.contrib.sql库为所有数字字段返回BigDecimals。将整个字段设置为整数有什么好方法?示例代码如下:Clojure contrib sql使所有数字成为BigDecimal

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

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

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

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

由于

+0

也许我不赶的东西,但为2147483647在Java中的整数的限制,与10位的数字应该是一个长期或一个BigDecimal – jneira 2010-09-16 10:40:54

+0

呀,对不起,应该是长.... – George 2010-09-16 12:06:36

回答

3

如阿特雷由宇指出的,一个10位的整数不一定适合的Integer内。

更重要的是,你给出的seq是由clojure.core/resultset-seq创建的,而这又被调用ResultSet.getObject(int)。根据JDBC规范,BigDecimals正在返回,因为这是对应于列的SQL类型的Java类型。

此外,您不必担心“迭代集合”。 resultset-seq是懒惰的,并且map是懒惰的,所以你只需要在使用它们之前就将每个数字转换为正确的值。例如,

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