0 引言
在数据连接(池)框架、数据服务/Data to API等中间平台中,因部分数据库不允许SQL中存在注释信息(如:Redis、Open Gemini等;当然,MYSQL、INFLUXDB等数据库是支持的),故存在这样一个需求:
- 在提交到数据库的SQL,需对原始SQL的注释信息予以去除。
以 OpenGemini V1.2.0 数据库为例,如果SQL中存在注释信息,将报错:
error parsing query: syntax error : unexpected $unk
1 解决方法
解决思路
基于 Java 的正则表达式进行正则匹配,是最佳选择。
SqlCommentStripper
import java.util.regex.Pattern;
/**
* SQL注释剥离器
* @author johnny zen
* @create-time 2024-08-12 14:35
* @note ...
*/
public class SqlCommentStripper {
private static final Pattern SINGLE_LINE_COMMENT_PATTERN = Pattern.compile("--.*?\n", Pattern.DOTALL);
private static final Pattern MULTI_LINE_COMMENT_PATTERN = Pattern.compile("/\\*.*?\\*/", Pattern.DOTALL);
/**
* 自动去除注释
* @param sql
* @return
*/
public static String stripComments(String sql) {
//eg: sql = "SELECT * FROM users WHERE id = 1; -- This is a single-line comment\n/* Hello Guys \nThis is a multi-line comment! */";
String cleanSql = SINGLE_LINE_COMMENT_PATTERN.matcher(sql).replaceAll("");
cleanSql = MULTI_LINE_COMMENT_PATTERN.matcher(cleanSql).replaceAll("");
return cleanSql;//eg : SELECT * FROM users WHERE id = 1;
}
}
X 参考文献
- GPT
- opgen gemini
- influxdb
标签:COMMENT,Java,Pattern,SQL,注释,PATTERN,去除,LINE From: https://www.cnblogs.com/johnnyzen/p/18355087