当前位置: 首页 > news >正文

[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 参考文献

http://www.wxhsa.cn/company.asp?id=674

相关文章:

  • 大模型面试题
  • CF2021D 题解 | dp
  • Caffeine缓存
  • Spark面试题清单
  • RocketMQ知识点梳理
  • Tekla坐标定位插件源码
  • 记录 使用PsExec启动System权限的WPF 程序
  • std::map的基本用法
  • 力扣20题 有效的括号
  • 2025年9月10日学习笔记之keil软件仿真调试
  • MySQL的explain使用
  • 力扣19题 删除链表的倒数第N个结点
  • 基于LZO的无损数据压缩IP,高性能压缩速率32Gbps,适用于FPGAASIC
  • IDEA创建文件时如何自动生成头部文档注释(简单、实用)
  • 一文带你吃透Power Platform,开启低代码开发新世界
  • docker compose 启动 redis 服务
  • MBR引导的OS Bootloader遇到被bios无视引导(自动重启)的解决办法
  • #java作业
  • 【Qt6】qt6下载地址
  • QOJ1838 Intellectual Implementation 题解
  • OpenSSH漏洞修复
  • 力扣15题三数之和
  • some plan
  • 利用废弃硬件中的零日漏洞:从Netgear路由器到BitDefender盒子的攻击链分析
  • ECT-OS-JiuHuaShan框架:自然规律的具象化智能体(附《易经》类比解析)
  • 力扣第5题最长回文子串
  • 用 Python 和 PaddleOCR 进行验证码识别
  • TASK 1 训练一个网络识别手写数字
  • 复杂背景验证码的识别思路与图像处理方法
  • Symfony学习笔记 - The Symfony Framework Best Practices