我收到以下错误
引起:java.lang.IllegalArgumentException:下溢 at oracle.jdbc.driver.OraclePreparedStatement.setDoubleInternal(OraclePreparedStatement.java:6604) 〜[ojdbc7-12.1.0.2.0-p0.jar:12.1.0.2.0] at oracle.jdbc.driver.OraclePreparedStatement.setDouble(OraclePreparedStatement.java:6574) 〜[ojdbc7-12.1.0.2.0-p0.jar:12.1.0.2.0] *
当我的数据对象中的一个double值为null /非法时,会发生这种情况。调用session.flush
时会发生这种情况。问题是我的数据对象有其他数据对象和N个集合元素的组合。
很难找到哪个双重数据成员提供此问题。
我已启用持久性日志,但无法查看为update语句形成的查询。
除上述行外,日志上没有任何内容。我已经在所有get成员函数上添加了断点。调用session.update
时没有发生异常。当session.flush
被调用时会发生这种情况。有时候,由于我拥有大量的数据元素,因此会缩短会话时间。因此调试所有数据元素有点困难。
如何找到提出问题的成员?
答案 0 :(得分:0)
你使用像Hibernate这样的东西吗?您可以启用调试或跟踪日志以显示生成的sql语句。 事实证明,即使Oracle JDBC具有可以启用的日志:
来自https://stackoverflow.com/a/40491028/66207:
按照链接的Oracle所述创建logging.properties文件 页面,并根据您的需要调整日志记录级别。例如:
.level=SEVERE oracle.jdbc.level=FINEST
oracle.jdbc.handlers=java.util.logging.FileHandler
java.util.logging.FileHandler.level=FINEST
java.util.logging.FileHandler.pattern=jdbc.log
java.util.logging.FileHandler.count=1
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
JDBC应用程序现在应该生成一个名为jdbc.log的文件,该文件应包含所需的信息。在某些情况下,可能需要指定logging.properties文件的完整路径。
来自https://stackoverflow.com/a/1713464/66207的Hibernate解决方案:
您需要为以下类别启用[logging] [2]:
org.hibernate.SQL
- 设置为debug
以记录执行时的所有SQL DML语句org.hibernate.type
- 设置为trace
以记录所有JDBC参数因此log4j配置可能如下所示:
# logs the SQL statements
log4j.logger.org.hibernate.SQL=debug
# Logs the JDBC parameters passed to a query
log4j.logger.org.hibernate.type=trace
第一个相当于hibernate.show_sql=true
legacy [property] [1],第二个打印绑定参数等。
答案 1 :(得分:0)
启用以下属性后,我能够打印持久性日志:
sessionFactory-> cacheAccess->SessionFactory->jdbcservices->sqlStatementLogger->logToStdOut
- >将此设置为TRUE。
现在打印了日志,我能够看到导致问题的数据。