首页 > 数据库 >[Java/SQL] 自动去除SQL注释

[Java/SQL] 自动去除SQL注释

时间:2024-08-12 15:38:31浏览次数:13  
标签:COMMENT Java Pattern SQL 注释 PATTERN 去除 LINE

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

相关文章

  • Java基础-学习笔记08
    01类变量、类方法、main方法、代码块类变量(静态变量)类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。关于静态变量在内存中的存放地址,有两种说法,①认为静态变量......
  • JDK自带命令:深入理解Java程序的运行机制
    JDK(JavaDevelopmentKit)是Java开发和运行环境的核心,它提供了丰富的命令和工具来帮助我们更好地理解和控制Java程序的运行。本文将详细介绍JDK自带的一些关键命令,以及它们的详细参数和执行结果。1.jps(JavaVirtualMachineProcessStatusTool)jps命令用于列出正在运行的......
  • SQL进阶技巧:断点缝合问题【如何按照业务规则对相邻行数据进行合并】
    目录0需求描述1数据准备2数据分析3小结 0需求描述如下图所示,按照定义的规则进行数据变换注意:b中的数值只有0和11数据准备withdataas(select2010 a,0bunionallselect2011 a,1bunionallselect2012 a,0bunionallselect2013 a,1bunionall......
  • JAVA中的File类
    File类概述`File`类提供了一系列的方法来操作文件和目录。它不直接访问文件内容本身,而是操作文件系统的属性,如文件大小、最后修改时间、文件类型(普通文件、目录等)等。需要注意的是,`File`对象本身只是文件路径的抽象表示,只有当通过`File`对象调用相关方法时,才会与底层文件系统......
  • 三十分钟入门基础Go(Java小子版)
    前言Go语言定义Go(又称Golang)是Google的RobertGriesemer,RobPike及KenThompson开发的一种静态、强类型、编译型语言。Go语言语法与C相近,但功能上有:内存安全,GC,结构形态及CSP-style并发计算。适用范围本篇文章适用于学习过其他面向对象语言(Java、Php),但没有学过......
  • MySQL
    1、初识MySQLJavaEE:企业级Java开发Web前端(页面:展示:数据)后台(连接点:连接数据库JDBC,连接前端(控制视图跳转,给前端传递数据))数据库(存数据,Txt,Excel,Word)只会写代码,学好数据库,基本混饭吃:操作系统,数据结构与算法!当一个不错的程序猿!离散数学,数字电路,体系结构,编译原理。+实战经验......
  • 科普文:Java基础系列之【你必须知道的框架基础-代理详解】
     概叙科普文:Java基础系列之【你必须知道的框架基础-反射/代理】-CSDN博客前面我们详细讲解了反射,反射作用在类加载后创建对象这个期间,再来看看代理。反射是基础,通过反射获取对象及其属性和操作;代理则可以将反射出来的类包装成目标类,然后构建一个代理类,通过代理类来操控目......
  • 科普文:Java基础系列之【你必须知道的框架基础-反射/代理】
    前言科普文:Java基础系列之【Java动态代理的应用场景和基本原理】-CSDN博客科普文:Java基础系列之【字节码增强技术探索】-CSDN博客科普文:Java基础系列之【字节码应用案例Fastjson原理和实操说明】-CSDN博客科普文:Java基础系列之【JVM字节码操作ASM框架概叙】-CSDN博客......
  • Rounding necessary错误解决Java的BigDecimal除法的
    出现Roundingnecessary错误原因是使用了BigDecimal的setScale方法导致。错误原因:setScale方法保留小数位数小于实际位数并且未指定roundingMode参数即报错。如下代码:BigDecimalrs=newBigDecimal("2057.9200");rs.setScale(2);上述代码实际数值是2057.9200是4位小......
  • JDBC加载MySQL驱动【底层实现】
    JDBC4.0如何加载引入依赖<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version></dependency>上代码importjava.sql.Connection;impor......