【问题标题】:JDOQL DATANUCLEUS filtering using String matches使用字符串匹配的 JDOQL DATANUCLEUS 过滤
【发布时间】:2013-11-22 10:30:44
【问题描述】:

将 JDO 与 Datanucleus 结合使用,我正在尝试从我的数据库中过滤一些数据(使用 jdoql)。我想使用正则表达式进行一些复杂的搜索,我发现 JDO 提供了接受正则表达式的 String 方法“matches”,并且根据 DATANUCLEUS 文档,该方法可以接收任何类型的 ExpReg:

matches(String pattern) :返回字符串是否匹配传递的表达式。模式参数遵循 java.lang.String.matches 方法的规则。

我能够根据一些正则表达式(如“.*”、“.”、“.*”)进行过滤,但不能使用其他表达式(如 [abcd])

有人可以确认不是所有的正则表达式语法都支持吗??

Query q = pm.newQuery(cl, "this.name.matches(filterName)");
q.declareParameters("String filterName");
List results = (List)q.execute("Bo.*");
return pm.detachCopyAll(results);

--> 还书,书2

But with : q.execute("B[aoe]ok")  return nothing !

谢谢

【问题讨论】:

  • 我敢肯定,如果您查看日志(例如调用的 SQL),您可能会更好地理解
  • 谢谢,但是我在哪里可以看到从 javax.jdo.Query 调用的 sql?日志文件中没有 sql 跟踪。
  • 日志文件中有 SQL ...当开发人员根据公开可见的 DataNucleus 文档将其日志记录配置到正确的级别 (DEBUG) 时。
  • 我遇到了同样的问题。 MATCHES 不返回任何结果(正则表达式已用 java 代码测试并且工作正常)。

标签: jdo datanucleus jdoql


【解决方案1】:

经过数十次失败的测试,我可以说(使用 DN 2.1)MATCHES 不起作用(针对 JAVA string.matches(regex) 测试):http://www.datanucleus.org/products/accessplatform_2_1/jdo/jdoql_methods.html

在我的测试中,我有以下正则表达式:

(PT)?999999990

被JDOQL翻译成:

LIKE '(PT)<UNPRINTABLE>999999990'

数据库包含许多记录,例如:
999999990
PT999999990
...

此外,根据 REGEX,JDOQL 解释器似乎会更改表达式...

以下正则表达式:

(?i)(PT)?999999990 

由 JDOQL 翻译成:

LIKE '(PT)<UNPRINTABLE>999999990'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多