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は、によって作成され、次にResultSet.getObject(int)clojure.core/resultset-seqを呼び出します。JDBC仕様に従って、列のSQLタイプに対応するJavaタイプであるため、が返されます。BigDecimals

また、「コレクションの反復」について心配する必要はありません。resultset-seqは怠惰であり、map怠惰であるため、消費する直前に各数値を変換することになります。例えば、

(sql / with-connection my-db
   (sql / with-query-results res
      [sql-str 6722]
      (やること
         (map(comp int:id)res))))
于 2010-09-16T11:30:26.843 に答える