【问题标题】:When do we get "'NaN' is not a valid numeric or approximate numeric value" in SQLException?我们什么时候在 SQLException 中得到“'NaN' 不是有效的数字或近似数值”?
【发布时间】:2013-06-17 08:52:48
【问题描述】:

我在我的 JSP 中添加了以下代码,并在将实体保存到 db 时遇到了一些异常。

 $('.validateWeight').click(function(event) {
var id = event.target.id;
var value;
$("#saveValue").val("");
if(id == "saveAndContinue"){
   var el = document.getElementById('saveValue');
   el.value = 1;
   //<c:set var="saveValue" scope="page" value="1"/>;
}else if(id=="saveAndClose"){
   var el = document.getElementById('saveValue');
   el.value = 2;
   //<c:set var="saveValue" scope="page" value="2"/>;
}

在我的 Java Action Class 中,我添加了 getter 和 setter

在需要的情况下,我将值设置为 1 和 2,但是在保存实体时,我不知道 'NAN' 值的来源方式和来源,并且我遇到了保存调用的问题。

例外:

org.springframework.dao.TransientDataAccessResourceException: Hibernate operation: could not update: [com.hk.domain.inventory.GrnLineItem#100]; SQL [update person set age=?, no_of_children=?, address_line_1=?, address_line_2=?, mrp=?, state=?, city=?, pincode=?, weight=? where id=?]; 'NaN' is not a valid numeric or approximate numeric value; nested exception is java.sql.SQLException: 'NaN' is not a valid numeric or approximate numeric value
org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:107)
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
org.springframework.orm.hibernate3.HibernateAccessor.convertJdbcAccessException(HibernateAccessor.java:424)
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:410)
org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
org.springframework.orm.hibernate3.HibernateTemplate.flush(HibernateTemplate.java:881)
com.hk.impl.dao.BaseDaoImpl.resetHibernateAfterWrite(BaseDaoImpl.java:247)

java.sql.SQLException: 'NaN' is not a valid numeric or approximate numeric value
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
com.mysql.jdbc.PreparedStatement.setDouble(PreparedStatement.java:3572)
org.apache.commons.dbcp.DelegatingPreparedStatement.setDouble(DelegatingPreparedStatement.java:129)
org.apache.commons.dbcp.DelegatingPreparedStatement.setDouble(DelegatingPreparedStatement.java:129)
org.apache.commons.dbcp.DelegatingPreparedStatement.setDouble(DelegatingPreparedStatement.java:129)
org.hibernate.type.DoubleType.set(DoubleType.java:60)
org.hibernate.type.NullableType.nullSafeSet(NullableType.java:154)
org.hibernate.type.NullableType.nullSafeSet(NullableType.java:131)
org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2025)
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2399)
org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2335)
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2635)
org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:115)
org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
org.springframework.orm.hibernate3.HibernateTemplate$28.doInHibernate(HibernateTemplate.java:883)
org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
org.springframework.orm.hibernate3.HibernateTemplate.flush(HibernateTemplate.java:881)
com.hk.impl.dao.BaseDaoImpl.resetHibernateAfterWrite(BaseDaoImpl.java:247)
com.hk.impl.dao.BaseDaoImpl.save(BaseDaoImpl.java:237)

【问题讨论】:

  • 当你把它放在el.value 中时,它会变成String。您需要找到将其发送到数据库的方法,而不是来自input
  • 这意味着sql列是整数类型,而您要保存的值是字符串类型。
  • 但我在 if-else 子句中使用“saveValue”字段。 vale 与 db 或任何其他实体没有任何关系?
  • 您能否分享一下您保存记录的 Pojo/Entity 和表架构。
  • 我已经解决了这个问题。有一个计算会将字段设置为无穷大,因此没有被保存。与 Jsp 的 NAN 和这个 NAN (在 sql 异常中提到的一个)更加混淆。谢谢

标签: java javascript mysql stripes


【解决方案1】:

您可以修改您的 javascript 以使用 Jquery

$('.validateWeight').click(function(event) {
   var id = event.target.id;

   $("#saveValue").val("");
   if (id == "saveAndContinue")
      $("#saveValue").val(1);
   else if (id == "saveAndClose")
      $("#saveValue").val(2);
}

您必须考虑到,如果 id 不是“saveAndContinue”或“saveAndClose”,则 ID 为“saveValue”的输入值将是“”,它不是数字并且会产生你的 NaN 错误。

另一方面,您应该检查在服务器端您收到的是字符串还是整数,因为您应该将整数传递给您的 Hibernate 函数。

【讨论】:

    猜你喜欢
    • 2017-02-20
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2014-02-19
    • 2013-07-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多