Clojure contrib sql 使所有数字成为 BigDecimal

标签 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 似乎是正确的。

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

谢谢

最佳答案

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

更重要的是,您给出的 seq 是由 clojure.core/resultset-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] 
      (do-stuff 
         (map (comp int :id) res))))

关于Clojure contrib sql 使所有数字成为 BigDecimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3716860/

相关文章:

Clojure let 绑定(bind)形式

clojure - "^:static"在 Clojure 中做什么?

fdef 的 clojure.spec 验证

java - 检查数据库表中引用的文件的物理存在

clojure - Clojure 的整体贡献

xml - Clojure XML 解析

clojure - 嵌套级别之间具有相互依赖值的 map 规范?

clojure - 定义 Clojure 宏的同义词

clojure - 将序列作为参数传递以代替多个参数

clojure - 如何在 clojure 1.3 中查找 import-static