【问题标题】:Invalid data conversion: Parameter instance 50.0/100 is invalid for the requested conversion. ERRORCODE=-4461, SQLSTATE=42815无效的数据转换:参数实例 50.0/100 对请求的转换无效。错误代码=-4461,SQLSTATE=42815
【发布时间】:2013-07-30 06:12:27
【问题描述】:
String expression = CHEMICAL_REORDERPOINT + "*" + searchRequest.getReorderPercentage() + "/100)";

之前:

String expression = CHEMICAL_REORDERPOINT + "*" + searchRequest.getReorderPercentage() + "/100)";

searchRequest.getReorderPercentage() 在提交值后动态来自浏览器。 让我们为searchRequest.getReorderPercentage() = 50 取值

so String expression = CHEMICAL_REORDERPOINT*50/100; 

这是在我的应用程序中的 JDBC 的准备语句中填充的,因此为了维护我以下列方式使用的准备语句规则:

之后:

String expression = CHEMICAL_REORDERPOINT + "*?)"
String str = searchRequest.getReorderPercentage() + "/100";
params.add(str)

这里的params是一个列表,参数将被迭代,并在执行时被放置在prepare语句的位置参数中。

但现在我遇到了异常 无效的数据转换:参数实例 50.0/100 对请求的转换无效。 ERRORCODE=-4461,SQLSTATE=42815

请任何人帮助我。谢谢

【问题讨论】:

  • 这不是 SQL。请更改标签
  • @LuisLL 在我看来他正在构建一个 SQL 查询,但我同意如果他包含实际生成的 SQL 查询会更好
  • 不是 jdbc+db2 方面的专家,但是......使用表达式而不是值来指定参数是否合法?是不是把参数解释为字符串,所以生成的sql是“*'50/100'”导致转换错误?

标签: sql jdbc db2


【解决方案1】:

如果我不得不猜测,我会说这是一个自动转换问题。

你有类似的东西

5 * 50.0 / 100

它成功了。

没有

50.0 / 100

它失败了。

似乎第一次它将所有操作数转换为整数,第二次将它们转换为浮点数。但是 100 不是有效的浮点常数。因此,将您的新输出更改为

50.0 / 100.0

50 / 100

【讨论】:

    【解决方案2】:

    您的参数化查询字符串应该看起来像“whatever is in CHEMICAL_REORDERPOINT * (? / 100)”,并且您应该使用 setDouble() 或 setFloat() 设置百分比值,而不是作为字符串。现在您正试图告诉 DB2 将任何内容乘以一个字符串,这没有多大意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-27
      • 2015-11-13
      • 2023-03-07
      • 2018-03-30
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      相关资源
      最近更新 更多