[Java/SQL/Utils] SQL注释清除工具:SqlCommentStripper
1 概述:SQL注释清除
- 清除SQL注释的场景
- 情况1:对于数据中台、查询引擎而言,对SQL脚本中注释的清除,是必须考虑的一个问题。
- 情况2:解决 GeminiDB 等尚不成熟的数据库,其提交 SQL中不允许有注释信息(例如 "-- xxxxx")的问题
Z 最佳实践
SqlCommentStripper
import lombok.extern.slf4j.Slf4j;
import javax.annotation.Nonnull;
import java.util.regex.Pattern;
/**
* SQL注释剥离器
* @create-time 2025-09-10 23:48
* @note
* 为解决 GeminiDB 等数据库 的 提交 SQL中不允许有注释信息(例如 "-- xxxxx")
* 在提交SQL到数据库前, SQL 中自动去除注释
*/
@Slf4j
public class SqlCommentStripper {
//Pattern.MULTILINE : 用于处理多行文本 ; Pattern.DOTALL : 让.匹配包括行终止符在内的任意字符
private static final Pattern SINGLE_LINE_COMMENT_PATTERN = Pattern.compile("--.*?\n", Pattern.DOTALL);
//LAST_LINE_SINGLE_LINE_COMMENT_PATTERN : 解决SQL最后一行存在单行注释的问题
private static final Pattern LAST_LINE_SINGLE_LINE_COMMENT_PATTERN = Pattern.compile("--.*?$", Pattern.MULTILINE);
private static final Pattern MULTI_LINE_COMMENT_PATTERN = Pattern.compile("/\\*.*?\\*/", Pattern.DOTALL);
/**
* 自动去除注释
* @param sql
* @return
*/
public static String stripComments(@Nonnull String sql) {
//eg: sql = "SELECT * FROM users WHERE id = 1; -- This is a single-line comment\n-- test1\n/* Hello Guys \n * This is a multi-line comment! */-- test2\n/* test 3*/SELECT * FROM product WHERE id = 2;-- test4";
log.debug("strip-before-sql:\n{}", sql);
String cleanSql = SINGLE_LINE_COMMENT_PATTERN.matcher(sql).replaceAll("\n");
cleanSql = LAST_LINE_SINGLE_LINE_COMMENT_PATTERN.matcher(cleanSql).replaceAll("");//去除最后一行SQL存在单行注释的问题
cleanSql = MULTI_LINE_COMMENT_PATTERN.matcher(cleanSql).replaceAll("");
//eg : SELECT * FROM users WHERE id = 1; SELECT * FROM product WHERE id = 2;
log.debug("strip-after-sql:\n{}", cleanSql);
return cleanSql;
}
}
X 参考文献
本文作者:
千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!

浙公网安备 33010602011771号