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/