2013-04-09 7 views
0

Драйвер JDBC DB2, как представляется, усекает точность полей Numeric/Decimal. У меня есть следующие поля, определенные в таблице ПРОДАЖ:Драйвер DB2 JDBC Truncates Decimal

СУММУ AS DECIMAL (16,16)

я тогда сделать следующее заявление вставки:

INSERT INTO ПРОДАЖ (СУММЫ) VALUES (14,12345678)

Если я запрошу использование объекта запроса в Центре управления DB2, я получаю 14.1234567800000000.

Если я сделать это с помощью Белка (клиент DB, который использует драйвер в DB2 JDBC для подключения к базе данных, я получаю 14.12346. То же самое происходит, когда я делаю то же самое с Java кода с использованием Hibernate.

Это приводит я полагаю, что драйвер JDBC урезает точность результата. Есть ли способ настроить JDBC-драйвер с параметрами, чтобы предотвратить это? Я видел параметры JDBC для драйвера JDBC, но ни один из них не описывает один, который влияет на этот .

+1

«DECIMAL (16,16)» немного странно, 14.123456789не подходит (что минимум a будет «DECIMAL (18,16)»). –

+0

Mark и Nayan являются правильными. Это значение * не может * вписываться в столбец DECIMAL (16,16) в DB2. DECIMAL (16,16) не имеет цифр слева от десятичной точки. Как говорится, вы не можете положить 10 фунтов ____ в сумку в 5 фунтов. Может быть, вы здесь ошибались? – WarrenT

+0

есть. Я фактически неправильно понял и думал, что точность была до десятичной точки и масштаба после. Наша фактическая таблица БД имела DECIMAL (19,8). После определения масштаба и точности он работал правильно. – jett

ответ

1

Если запись правильно вставлена ​​в базу данных, то при извлечении она, вероятно, будет отформатирована/усечена неявно.

Я столкнулся с подобной проблемой при извлечении записей с помощью Toad for Oracle. Затем у меня настроены настройки вручную, чтобы они отображались правильно, но не знакомы с DB2.

Вы можете попробовать настроить его в определении столбцов. @Column(precision=16, scale=8) для BigDecimal раздел.

точность: Точность для десятичной (точный числовой) столбца. (Применяется только в том случае, если используется десятичный столбец.)

шкала: Шкала для десятичной (точной числовой) колонки. (Применяется только в том случае, если используется десятичная колонка.)

Прецизионность - это общее количество цифр и шкалы - это количество цифр справа от десятичной точки. Попробуйте изменить значения для них обоих, в настоящее время это кажется неуместным.