2

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)

谢谢

4

1 回答 1

3

正如 atreyu 所指出的,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]
      (做东西
         (地图 (comp int :id) res))))
于 2010-09-16T11:30:26.843 回答