2010-09-15 9 views
2

clojure.contrib.sql庫爲所有數字字段返回BigDecimals。將整個字段設置爲整數有什麼好方法?示例代碼如下:Clojure contrib sql使所有數字成爲BigDecimal

(sql/with-connection my-db 
    (sql/with-query-results res 
     [sql-str 6722] 
     (into [] res))) 

在記錄的結果集合中,所有數字都是BigDecimal。其中一些是外鍵,由於我自己的原因,我需要它們是整數。

我知道我可以迭代集合並轉換它們,但我寧願不這樣做,因爲它是一個非常大的集合,並且如果該庫適用於整數,該庫使用ResultsSet.getInteger似乎是正確的。

的DB是Oracle和整數DB字段定義爲NUMBER(10)

由於

+0

也許我不趕的東西,但爲2147483647在Java中的整數的限制,與10位的數字應該是一個長期或一個BigDecimal – jneira 2010-09-16 10:40:54

+0

呀,對不起,應該是長.... – George 2010-09-16 12:06:36

回答

3

如阿特雷由宇指出的,一個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] 
     (do-stuff 
     (map (comp int :id) res)))) 
相關問題