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 知道如何处理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_ + ")");
【问题讨论】:
为什么需要使用Statement
? PreparedStatement
不是“预编译的存储过程”,它只是一种特殊的语句,通常是更好的选择!
我需要一个语句,因为我在一个已经定义的程序中工作,如果我找不到一种方法使它与语句一起工作,我将不得不修改数千个类...: (
【参考方案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 处关闭
如何在 HSQLDB 中使用多行 SELECT 语句导出数据?