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)
由于
答案 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))))