Postgresql钱类型和java

时间:2015-01-06 17:39:45

标签: java sql postgresql

我已经在postgresql数据库中定义了一个列作为钱类型,让我们说总计。 我正在使用JAVA插入数据JSpinner使用双模型,插入完成得非常完美,但是当我想要选择存储在总列中的数据时

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$3.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.access$400(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:697)
    at java.awt.EventQueue$3.run(EventQueue.java:691)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.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)

2 个答案:

答案 0 :(得分:2)

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

select total::numeric, ...

但是,有一些与金钱类型相关的问题,最好只使用普通数字来存储金额。

答案 1 :(得分:0)

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

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

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