HSQLDB Statement и Java NaN удваиваются - PullRequest
2 голосов
/ 28 февраля 2011

В настоящее время я использую HSQLDB для сохранения данных Java. В этих данных есть некоторые Double, и некоторые из них могут иметь значения NaN (описывается как 0.0/0.0 в javadoc). HSQLDB знает, как обрабатывать эти значения в setDouble и setFloat из PreparedStatement. Дело в том, что мне нужно использовать Statement объект, а не предварительно скомпилированную хранимую процедуру, и я просто не могу найти способ заставить ее работать.
Если бы у вас был крошечный намек, это было бы очень кстати:)
Спасибо.

РЕДАКТИРОВАТЬ: Вот куча кода, который я использую:

stmt.executeUpdate("insert into Mesh(Id, name, dimension, meshtype, totalVolume, NumberOfCoarseCell) values (identity(), "  
                             + "'" + name_ + "',"  
                             + dimension_ + "," // this value can be NaN  
                             + "'" + type_.toString() + "',"   
                             + totalVolume_ + "," // this value can be NaN  
                             + numberOfCoarseCells_ + ")");  

Ответы [ 2 ]

3 голосов
/ 28 февраля 2011

Вы имеете в виду, что вам нужен способ написать NaN внутри оператора SQL? Следующее работает как для HSQLDB, так и для базы данных H2 :

select sqrt(-1) from dual

Однако, это не работает для Apache Derby и PostgreSQL (я не тестировал другие базы данных).

1 голос
/ 28 февраля 2011

С HSQLDB 1.8.x вы можете использовать (0.0e1 / 0.0e1) как выражение, которое возвращает NaN.

Например:

create table t (d double)
insert into t values (0.0e1/0.0e1) 

Для HSQLDB 2.1 и выше,свойство должно быть указано с помощью оператора SQL:

SET DATABASE SQL DOUBLE NAN FALSE

или как свойство соединения:

hsqldb.double_nan=false
...