gpt4 book ai didi

java - 在 Update 语句后获取 WHERE 子句

转载 作者:行者123 更新时间:2023-11-30 21:26:33 26 4
gpt4 key购买 nike

我需要在更新语句之后获取 where 子句,例如

UPDATE user_accounts SET bio='This is my bio' WHERE user_id = 1 OR name = 'Alex';

目前,我可以使用以下代码获取 where 子句之后的所有内容:

String query = "UPDATE user_accounts SET bio='This is my bio' WHERE user_id = 1 OR name = 'Alex'";
int index = query.toUpperCase().indexOf("WHERE");
if (index != -1) {
System.out.println(query.substring(index));
}

但后来我发现这有很大的缺陷,因为这些示例查询会失败:

UPDATE user_accounts SET bio='This is where my bio is' WHERE user_id = 1 OR name = 'Alex';
UPDATE user_accounts SET whereColumn='' WHERE user_id = 1 OR name = 'Alex'
UPDATE user_whereabouts SET columnName='' WHERE user_id = 1 OR name = 'Alex'

从本质上讲,如果表名或任何列名或 SET 下的列值包含单词“where”(不区分大小写),这将失败。

我目前的想法是按照执行以下操作的正则表达式的思路:

  1. 检查单词 where 是否在 ' ' 或 ""之间(例如 bio = "This is where my bio is")并跳过它以移动到不在引号内的那个。这将有助于消除在 SET 值中找到的where 词。当然,字符串周围的 Java 引号不适用,因为它们不是字符串本身的一部分。
  2. 检查单词 where 是否夹在空格之间(例如 ... WHERE ...)。这将有助于消除表名或列名中的 where 词(SQL 语法本身不允许表名或列名仅作为保留字)。
  3. 最后,返回想要的 WHERE 的索引以获取子字符串(问题的目的)。

我不太熟悉正则表达式,因此,我需要帮助。请注意,任何其他实现目标的方法也将受到高度赞赏。

最佳答案

您需要某种 SQL 解析器,因为正则表达式在许多情况下会失败(例如,如果 where 子句有子选择怎么办?)

我从未尝试过,但 JSQLParser似乎是一个很好的解决方案

关于java - 在 Update 语句后获取 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58659572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com