0

我想在 Java 中获取数据库查询的主要 where 子句的索引?我如何使用正则表达式处理这个问题?

例如,在此查询中,我想获得第二个 where 子句:

  select u.id, (select x.id from XEntity where x.id = 200) 
  from UserEntity u 
  **where** u.id in (select g.id from AnotherEntity g where g.id = 100) 

我认为主要是哪个“(”字符和“)”字符的数量在它之后是相等的。但我不知道如何用正则表达式得到这个。

最诚挚的问候

4

2 回答 2

0

正则表达式不太擅长识别 SQL 查询等复杂结构。主要是因为 SQL 不是上下文无关的,这正是您遇到的问题:WHERE 可以出现在很多地方,而您特别需要一个取决于查询的整体结构的地方。

您将需要一个合适的解析器。我能找到的唯一 JavaScript SQL 解析器不是太完整,但您始终可以通过确保它满足您的需求来帮助开发它。

于 2012-06-25T23:40:01.040 回答
0

图特和大卫布拉班特所说的绝对正确。解析 SQL,尤其是仅使用正则表达式的复杂 SQL 是一个非常困难的问题。

就在 Java 中解析 SQL 而言,这似乎是您问题的重点,有一个非常好的(如果显然未维护)库,称为 JSQLParser。可以在 Github 上找到该库的更新版本免责声明:我对此做出了很小的贡献)。主页显示了一个访问者示例,旨在使用此处的 AST 输出。

ANTLR的语法列表中还有一个可用的语法。或者,如果您喜欢冒险,H2 数据库支持相当广泛的 SQL,包括一些专有特性,例如 MySQL。您可以修改它的Parser以生成适当的结构来提取您需要的信息。

于 2012-06-26T00:03:52.467 回答