【问题标题】:HSQLDB Statement and Java NaN doublesHSQLDB 语句和 Java NaN 双打
【发布时间】: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 不是“预编译的存储过程”,它只是一种特殊的语句,通常是更好的选择!
  • 我需要一个语句,因为我在一个已经定义的程序中工作,如果我找不到一种方法使它与语句一起工作,我将不得不修改数千个类...: (

标签: java prepared-statement hsqldb


【解决方案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”的异常。
  • 答案中添加了必填属性。
猜你喜欢
  • 2016-08-18
  • 2011-10-04
  • 2020-03-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2015-10-31
相关资源
最近更新 更多