我有一个巨大的代码库,其中有很多 JAVA 和 .sql 文件。我打算从所有这些文件中提取所有 SQL 语句。
这是我打算实现这一目标的方式 -
- 构建一个正则表达式文件,其中包含我打算提取的选择、插入、删除、更新等模式。
- 在代码库中逐行解析文件并与正则表达式进行匹配。如果找到匹配,则注册代码行、文件名、模式等。
当 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/