2012-09-04 66 views
2

當我需要檢索訂單表中的某些信息時,jasper不能從PGmoney轉換爲double。我首先搜索谷歌,但沒有這個結果。賈斯珀報告:無法獲得字段'x'的值'org.postgresql.util.PGmoney'

你知道如何解決它嗎?

注:我使用PostgreSQL數據庫。

+0

正如你可以閱讀[貨幣類型](http://www.postgresql.org/docs/9.0/interactive/datatype-money.html)後'regexp_replace'函數可以幫助你 –

+0

謝謝亞歷克斯K.我修復它 – TPL

+0

嗨亞歷克斯K,我有一個問題,我用hql語言來查詢數據,我讀了你給我的網頁,但它告訴我投錢給數字,然後加倍。但在hql中,我不能轉換爲數字或雙精度(絕對)。當我把它轉換爲字符串(錯誤)。 – TPL

回答

5

這是PostgreSQL money類型was deprecated and should be avoided的幾個原因之一。奇怪newer versions of the same documentation don't show the deprecation warning但我and others不同意這一點,並認爲它的使用應該勸阻。

如果可能的話,改變你使用的模式numeric相反,像numeric(17,2)如果只想存儲整個數美分,或一些更精確的中間值。您將在HQL中與money一起工作的噩夢,甚至Java的BigDecimal類(通常用於映射numeric字段)儘管它的算術語法非常笨拙,但仍然更好。

我會做一個ALTER TABLE blah ALTER COLUMN blahcol TYPE numeric(17,2) USING (regexp_replace(blahcol::text, '[$,]', '', 'g')::numeric);而忘記如果我是你存在的money類型。

+0

您鏈接到的討論發生在2008年。版本9.1帶來了一些改進 - 解決了這些問題。 '增加對金錢分配的支持(Andy Balholm)','在金錢和數字之間添加支持(Andy Balholm)'並且'將int4和int8的投射支持添加到錢(Joey Adams)'。你從8.2手冊中引用的是在8.3改變之前:'將MONEY數據類型擴展到64位(D'Arcy Cain)這大大增加了支持的MONEY值的範圍。「因此,雖然我會使用'numeric'我也不明白爲什麼原則上應該避免「金錢」。 –

+0

@ErwinBrandstetter嗯,當我看到演員問題等時,我不小心回到了舊版手冊。現在看起來好多了。我仍然沒有看到'優勢''金錢'帶來了什麼,但是肯定會更好。但是,使用查詢生成器等時,它的格式仍然可能會很痛苦,因爲它們通常都是關於最小公因分析特性的。 –

+0

我想你就在那裏。正如我所說的,我也會使用'數字'。只是把事情的角度來看...... –