我试图让我们的 Hibernate 应用程序在 Oracle 11g 上运行,但在尝试保留 double.max_value 时,我们不断收到以下错误:
Caused by: java.sql.SQLException: Internal Error: Overflow Exception trying to bind 1.7976931348623157E308
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:263)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:271)
at oracle.jdbc.driver.DoubleBinder.bind(OraclePreparedStatement.java:15676)
at oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:2948)
at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:2202)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3382)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3468)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2437)
... 11 more
有人知道为什么我们不能坚持这个值吗?
我们只在 Oracle 中遇到这个问题 - Postgres 和 H2 工作正常。
我们尝试将 Oracle 数据类型强制为 Number 和 Binary_Double,但结果相同。我们使用 Hibernate 3 和 Oracle 11g,以及 oracle jdbc 驱动程序和 OracleSpatial10g 方言。
(我是 Hibernate 和 Oracle 新手,因此非常感谢任何帮助。)
编辑:到目前为止有一些有用的评论,但我仍然没有弄清楚我的问题。以下是更多信息:
- 我发现可以使用 BINARY_DOUBLE 将数字直接插入数据库。我使用 sqlfiddle 并使用 SQLDeveloper 通过本地数据库进行了尝试。我还可以在 SQLDeveloper 中检索它。
- 我的问题是我无法将数字提交到我的数据库...在任何内容进入数据库之前都会抛出异常。
最佳答案
正如@Tomas的answer所述,有一个数据类型 binary_double
,它的最大值就是您需要的值。
以下是如何将 1.7976931348623157E308
作为数值插入到表中
create table t1 (big_val binary_double);
insert into t1 values( cast('1.7976931348623157E308' as binary_double) );
关于java - 尝试在 Oracle 中绑定(bind) double.max_value 时发生溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13145288/