java - 从 Java/SQL 文件中提取 SQL 语句

标签 java sql regex text-extraction

我有一个巨大的代码库,其中有很多 JAVA 和 .sql 文件。我打算从所有这些文件中提取所有 SQL 语句。

这是我打算实现这一目标的方式 -

  1. 构建一个正则表达式文件,其中包含我打算提取的选择、插入、删除、更新等模式。
  2. 在代码库中逐行解析文件并与正则表达式进行匹配。如果找到匹配,则注册代码行、文件名、模式等。

当 SQL 查询被分成多行时,就会出现问题。

当我使用缓冲读取器读取行时,我正在使用 java.util.regex.Matcher 和 java.util.regex.Pattern 方法来构建/匹配正则表达式模式。

  pattern = Pattern.compile(regexString,Pattern.CASE_INSENSITIVE);
  .
  .
  matcher = pattern.matcher(lineBuffer.readline().trim());
  if( matcher.find()){
    //Do something
  }

对于多行语句, 我应该寻找行终止符“;” - 如果找不到,我可以读取下一行并将输出附加到匹配的字符串中,以便将其理解为单个查询。

 while(!lineString.endsWith(";")) {
   lineString = lineString + lineBfr.readLine().trim();
 }

是否有更好的方法来使用 Pattern.MULTILINE 或使用 StreamBuffers 来实现此处的要求,将整个文件读入单个缓冲区并进一步处理?

最佳答案

您可以利用Apache Commons ,以及他们的伟大方法FileUtils#readFileToString(File file) .
这与您提到的 Pattern.MULTILINE 相结合似乎是一个可能非常简单的解决方案。

关于java - 从 Java/SQL 文件中提取 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13049878/

相关文章:

java - 代码复杂度分析

java - Hibernate 5 警告,如何解决这些问题?

java - Jersey JSON 应用程序构建失败

python - 使用变量 python 从 mysql 读取/存储

javascript - 我如何在javascript中使用正则表达式验证实数

Java - 为什么我的鼠标不能正确移动?

sql - 是否可以编写一个基于列的运行总计进行分组的 sql 查询?

java - String.split() 没有按预期工作

javascript - 带警报的快速正则表达式

mysql - 如何对这么大的MySQL表进行分区?