HSQLDB 语句和 Java NaN 双打

Posted

技术标签:

【中文标题】HSQLDB 语句和 Java NaN 双打【英文标题】:HSQLDB Statement and Java NaN doubles 【发布时间】:2011-02-28 09:49:18 【问题描述】:

我目前正在使用 HSQLDB 来保存 java 数据。在这些数据中,有一些 Double,其中一些可以是 NaN 的值(在 javadoc 中描述为 0.0/0.0)。 HSQLDB 知道如何处理setDoublesetFloat 中的这些值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_ + ")");  

【问题讨论】:

为什么需要使用StatementPreparedStatement 不是“预编译的存储过程”,它只是一种特殊的语句,通常是更好的选择! 我需要一个语句,因为我在一个已经定义的程序中工作,如果我找不到一种方法使它与语句一起工作,我将不得不修改数千个类...: ( 【参考方案1】:

您的意思是您需要一种在 SQL 语句中编写 NaN 的方法?以下适用于H2 database:

select sqrt(-1) from dual

但是,它不适用于 Apache Derby 和 PostgreSQL(我没有测试其他数据库)。对于 HSQLDB,它不再适用于 2.1 及更高版本,除非您设置 SET DATABASE SQL DOUBLE NAN FALSE

【讨论】:

您好,谢谢您的回答。当我尝试使用 sqrt(-1) 时,我收到了这条消息: java.sql.SQLException: data exception: numeric value out of range?有什么想法吗? 如果我在控制台中使用 sqrt(-1),我实际上可以工作,但它实际上在 Statement 对象中似乎不起作用。任何的想法?谢谢。 这在 HSQLDB 2.5 中不再有效,除非(如@fredt 的回答),SET DATABASE SQL DOUBLE NAN FALSE 被指定【参考方案2】:

在 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

【讨论】:

您好,感谢您的回答,但它仍然无法正常工作。当我尝试按照您指示的方式使用它时,我得到一个“除以 0”的异常。 答案中添加了必填属性。

以上是关于HSQLDB 语句和 Java NaN 双打的主要内容,如果未能解决你的问题,请参考以下文章

java.sql.SQLException: SQL 语句在 org.hsqldb.jdbc.JDBCUtil.sqlException 处关闭

如何将长双打与 qsort 以及关于 NaN 进行比较?

如何在 HSQLDB 中使用多行 SELECT 语句导出数据?

IN 在语句 DB2 等价于 HSQLDB

HSQLDB - 可更新语句不适用于“SELECT TOP”或“ORDER BY”

Hsqldb - 可能的准备语句内存泄漏