私はたくさんのJAVAと.sqlファイルを持っている巨大なコードベースを持っています。これらすべてのファイルからすべてのSQLステートメントを抽出するつもりです。
これが私がこれを達成しようとしている方法です-
- 抽出する予定のselect、insert、delete、updateなどのパターンを含む正規表現ファイルを作成します。
- コードベースでファイルを1行ずつ解析し、正規表現と照合します。一致するものが見つかった場合は、コード行、ファイル名、パターンなどを登録します。
この問題は、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を使用して、ここで要件の解決策を達成するためのより良い方法はありますか?