2015-01-06 3 views
1

Я определил столбец в моей базе данных postgresql как тип денег, допустим, всего. Я вставив данные с JAVA JSpinner использует двойную модель, вводный делаются просто отлично, но когда я хочу, чтобы выбрать данные, хранящиеся в общей колонке сТип денег postgresql и java

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

Как пояснялось на MONEY documentation page вам нужно привести значение выходного в запросе, если вы хотите получить доступ к его числовой значение, например:

select total::numeric, ... 

Однако, есть несколько проблем, связанных с типом денег, лучше всего использовать простой числовой для хранения сумм.

0

Я считаю, что проблема в том, что BigDecimal не может использовать такую ​​запятую. Если вы можете получить его в виде строки в коде, рассмотреть разборе его с

NumberFormat.getNumberInstance(Locale.FRANCE).parse("0,00") 

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

+0

Дело в том, что в этом случае запрос фактически возвращает '0,00 €', то есть включая знак Euro, или местный эквивалент в зависимости от настройки lc_monetary. – fvu

Смежные вопросы