【问题标题】:How does one convert string to number in JDOQL?如何在 JDOQL 中将字符串转换为数字?
【发布时间】:2013-07-27 03:01:54
【问题描述】:

我有一个 JDOQL/DataNucleus 存储层,它在 varchar 字段中存储可以具有多种原始类型的值。其中一些是数字的,我需要将它们与数字常量进行比较 (>/...)。如何做到这一点?我试图使用例如(java.lang.)Long.parse 字段或值(例如 java.lang.Long.parseLong(field) > java.lang.Long.parseLong(string_param)),针对字符串字段提供 long 类型的参数等.但它不起作用。事实上,我很少得到任何错误,对于各种组合,它会返回所有值或不返回任何值,因为没有容易辨别的原因。 有这方面的文档吗?

澄清:该字段是字符串类型(实际上是我从中获取的字符串集合)。对于某些值的子集,它们可能存储整数,例如“3”字符串,我需要做例如值 >= 2 个过滤器。 我尝试使用强制转换,但不多,它们确实会产生错误,让我再调查一下

【问题讨论】:

  • 既然我们这里说的是JDO,那么你想用数字比较的字段,实际上是Strings 吗?我的意思是你需要在数字上比较的持久类成员变量是String

标签: jdo datanucleus jdoql


【解决方案1】:

JDO 有一组有据可查的方法,这些方法可有效地与 JDOQL 一起使用,DataNucleus JDO 在这些方法上添加了一些额外的方法,并允许用户根据需要添加对其他方法的支持 http://www.datanucleus.org/products/accessplatform_3_3/jdo/jdoql.html#methods

那么您也可以使用 JDOQL 强制转换(在与该链接相同的页面上)。

【讨论】:

  • 强制转换不适用于这种情况;使用像“(Long)values.get(2)> param0”这样的过滤器,我得到JDOUserException:无法在org.datanucleus.store.rdbms上执行操作“cast to org.datanucleus.store.rdbms.sql.expression.StringLiteral@21789983” .sql.expression.StringExpression@74a6789f 查看 SQLExpression 源代码,对于我投射的内容并不重要,StringExpression 不能投射到任何东西。要实现对 SQL92 和非 SQL 存储的“一流”支持,需要做什么,使用 toLong 等方法实现 SQL 和内存插件? DN 会在适当的时候使用每一个吗?
  • 没有实现强制转换并不意味着某人不能贡献将字符串强制转换为某物的能力(让我们面对现实吧,大多数人将“字符串”存储为“字符串”,所以如果你想得到支持,你必须贡献它)。要将其作为方法调用来执行,您可以实现将要使用的任何一个......如果在数据存储中评估它,则执行 sql_method,如果在内存中,则使用 store_query_methods(或者如果您在某个时候可能需要两者都提供)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 2019-02-17
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多