Postgresql 货币类型和 java

Postgresql money type and java

我在我的 postgresql 数据库中定义了一个列作为货币类型,假设是总计。 我使用 JAVA 插入数据 JSpinner 使用双模型,插入非常完美,但是当我想获取 select 存储在

总列中的数据时
result.getBigDecimal("total");

我收到一个错误;

org.postgresql.util.PSQLException: Mauvaise valeur pour le type BigDecimal : 0,00 €
    at org.postgresql.jdbc2.AbstractJdbc2ResultSet.toBigDecimal(AbstractJdbc2ResultSet.java:3012)
    at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getBigDecimal(AbstractJdbc2ResultSet.java:2400)
    at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getBigDecimal(AbstractJdbc2ResultSet.java:355)
    at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getBigDecimal(AbstractJdbc2ResultSet.java:361)
    at DAO.BonDachatDAO.findAll(BonDachatDAO.java:42)
    at VIEW.BonDeAchatUi.initComponents(BonDeAchatUi.java:255)
    at VIEW.BonDeAchatUi.<init>(BonDeAchatUi.java:123)
    at VIEW.BonDeAchatUi.run(BonDeAchatUi.java:483)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
    at java.awt.EventQueue.access0(EventQueue.java:97)
    at java.awt.EventQueue.run(EventQueue.java:697)
    at java.awt.EventQueue.run(EventQueue.java:691)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

我认为问题在于 BigDecimal 不能使用那样的逗号。如果您可以在代码中将其作为字符串获取,请考虑使用

对其进行解析
NumberFormat.getNumberInstance(Locale.FRANCE).parse("0,00")

http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html

MONEY documentation page 中所述,如果要访问其数值,则需要在查询中强制转换输出值,如下所示:

select total::numeric, ...

但是,有几个与货币类型相关的问题,最好只使用纯数字来存储金额。