【问题标题】:Regular Expresions queries with HSQLDB in Java在 Java 中使用 HSQLDB 进行正则表达式查询
【发布时间】:2018-09-04 15:24:13
【问题描述】:

我正在尝试为我的应用创建一个正则表达式过滤器。我正在使用 HSQLDB 来存储我的消息和 regex.pattern[1] 类来匹配传入的消息。我注意到 HSQLDB 中的 regex.pattern 和 LIKE 使用了不同的匹配“teqniques”。

示例

我要匹配:{"auth_user":"YQ==","auth_pass":"ZGFz"}

使用 HSQLDB:SELECT * FROM messages LIKE %auth%

使用 regex.pattern:\bauthauth

我的问题

  1. 有什么方法可以从用户那里获取输入并在 HSQLDB 中使用 RLIKE 或 REGEX 进行查询?

  2. 有没有什么简单的方法可以在 HSQLDB 查询中转换 regex.pattern?

[1]https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

提前谢谢你。

编辑 1:我收到的消息不仅是 JSON 格式的。

编辑 2: 我试过 REGEXP_MATCHES 像 @JorgeCampos 和 @fredt 提到我,但我得到以下异常 SQL Error [S1000]: java.lang.ClassCastException: org.hsqldb.types.ClobDataID cannot be cast to java.lang.String 当我执行以下命令时 SELECT * FROM WEBSOCKET_MESSAGE WHERE REGEXP_MATCHES(PAYLOAD_UTF8, '^a.*');

【问题讨论】:

  • 如果您需要搜索 JSON,那么为什么不将该 JSON 读入 Java 并使用解析器(例如 GSON)来检查其内容?在这里使用正则表达式似乎会在以后引发问题。
  • 如果您在 SQL 语句中大量操作 JSON,您可能需要考虑切换到直接支持 JSON 和对 JSON 文档进行操作的 DBMS。例如。 PostgreSQL 对 JSON 的支持非常好
  • @TimBiegeleisen 我喜欢你的方法,但我收到的消息不仅仅是 JSON。
  • 刚刚阅读错误我知道您的数据库中有一个 CLOB 数据类型,您正在使用正则表达式函数。我认为由于 clob 数据存储为流,因此它不支持正则表达式(尽管我在文档中没有找到任何明确提及)

标签: java regex database hsqldb rlike


【解决方案1】:

使用REGEXP_MATCHES(column_name, regular_expression)

该函数使用 Java 正则表达式语法。

如果列类型是 CLOB,则使用强制转换为 VARCHAR

REGEXP_MATCHES(CAST (column_name AS LONGVARCHAR), regular_expression)

【讨论】:

    猜你喜欢
    • 2017-09-26
    • 2016-02-18
    • 1970-01-01
    • 2013-09-17
    • 2016-07-05
    • 2014-10-21
    • 1970-01-01
    • 2012-01-19
    • 2018-06-23
    相关资源
    最近更新 更多