【问题标题】:Clojure contrib sql makes all numbers a BigDecimalClojure contrib sql 使所有数字成为 BigDecimal
【发布时间】:2010-09-16 19:30:26
【问题描述】:

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)

谢谢

【问题讨论】:

  • 也许我没有抓到东西,但 2147483647 是 Java 中整数的限制,10 位数字应该是 Long 或 BigDecimal
  • 是的,抱歉应该很久了....

标签: clojure clojure-contrib


【解决方案1】:

正如 atreyu 所说,一个 10 位整数不一定适合 Integer

更重要的是,给你的 seq 是由 clojure.core/resultset-seq 创建的,而后者又调用了 ResultSet.getObject(int)。根据 JDBC 规范,将返回 BigDecimals,因为这是与列的 SQL 类型相对应的 java 类型。

此外,您无需担心“迭代[ing] 集合”。 resultset-seq 是惰性的,map 是惰性的,因此您最终会在使用它们之前转换每个数字。例如,

(sql/with-connection my-db (sql/with-query-results res [sql-str 6722] (做东西 (地图 (comp int :id) res))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    相关资源
    最近更新 更多