Search code examples
javaprepared-statementhsqldb

HSQLDB Statement and Java NaN doubles


I'm currently using HSQLDB to save java data. Within theses datas, there are some Double, and some of them can be of values of NaN (described as 0.0/0.0 in the javadoc). HSQLDB know how to handle these values in setDouble and setFloat of PreparedStatement. The thing is, I have to use a Statement object, not a precompiled stored procedure, and I just can't find a way to make it work.
If you had the tinyest hint, it would be most welcome :)
Thanks.

EDIT : Here's the bunch of code I'm using :

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_ + ")");  

Solution

  • With HSQLDB 1.8.x you can use (0.0e1/0.0e1) as an expression that returns NaN.

    For example:

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

    For HSQLDB 2.1 and above, an property must be specified with an SQL statement:

    SET DATABASE SQL DOUBLE NAN FALSE
    

    Or as a connection property:

    hsqldb.double_nan=false