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

news/2024/9/20 15:24:00/文章来源:https://www.cnblogs.com/johnnyzen/p/18355087

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
  • https://docs.opengemini.org/zh/guide/quick_start/get_started.html
  • influxdb
  • https://docs.influxdata.com/influxdb/v1/about_the_project/release-notes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/781797.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础-学习笔记08

类变量、类方法、main方法、代码块01 类变量、类方法、main方法、代码块 类变量(静态变量) 类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。关于静态变…

ABC366D 题解

第一眼是想写 \(kd-tree\) 的。 然后发现这就是一道三维前缀和的板子题。 三维前缀和 要想学习三维前缀和,我们首先得了解前缀和的概念,并且学会一维、二维前缀和。 什么是前缀和 前缀和是容斥原理的典型应用。这种优化方式可以使求和操作的时间复杂度降低到 \(O(1)\)(但是需…

C# 如何防止WinForm程序多次运行

[C# 开发技巧]如何防止程序多次运行 - Learning hard - 博客园 (cnblogs.com) 一、引言 最近发现很多人在论坛中问到如何防止程序被多次运行的问题的,如: http://social.msdn.microsoft.com/Forums/zh-CN/6398fb10-ecc2-4c03-ab25-d03544f5fcc9, 所以这里就记录下来,希望给遇到…

lwIP——带操作系统(FreeRTOS)移植

1. lwIP前期准备 在程序工程中,我们在工程文件夹下创建了一个名为 “lwip”的子文件夹。在“lwip”文件夹下,我们又创建了一个子文件夹:arch 。arch 文件夹用于存放 lwIP 系统的配置文件;2. 添加lwIP源文件3. 添加网卡驱动程序/* Includes -------------------------------…

Less is richness,基于less is more的博客园宽屏主题魔改

写在前面 之前做过很多个人博客,都是做着玩的,资源托管在免费或低价的服务器上,也不经常维护,所以就一直不长久,最终还是选择了博客园。发现博客园可以自定义样式,于是试着给博客换了一个又一个主题。个人比较喜欢宽屏的样式,感觉LessIsMore主题布局比较好、也比较简洁,…

5 大场景上手通义灵码企业知识库 RAG

大家好,我是通义灵码,你的智能编程助手!最近我又升级啦,智能问答功能全面升级至 Qwen2,新版本在各个方面的性能和准确性都得到了显著提升。此外,行间代码补全效果也全面优化,多种编程语言生成性能及准确性大幅提升,如前端、Java、Go、Python、C++ 等。此外,灵码新增代…

2024 年了,IT 运维监控系统都有哪些推荐?

大浪淘沙,2024 年的今天,市面上很多监控系统慢慢淡出了大家的视野,而一些新的监控系统也逐渐崭露头角。今天我们就来看看 2024 年的当下,哪些 IT 运维监控系统最值得关注。 Prometheus毫无疑问,Prometheus 是最值得关注的监控系统,因为 Prometheus 的规范和生态都非常厉害…

不只是前端,后端、产品和测试也需要了解的浏览器知识(二)

继上篇《 不只是前端,后端、产品和测试也需要了解的浏览器知识(一)》介绍了浏览器的基本情况、发展历史以及市场占有率。 本篇文章将介绍浏览器基本原理。在掌握基本原理后,通过技术深入,在研发过程中不断创新,推动产品性能、用户体验的提升,来实现业务的增长,创造可持…

三十分钟入门基础Go(Java小子版)

前言 Go语言定义 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态、强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC,结构形态及 CSP-style 并发计算。 适用范围 本篇文章适用于学习过其他面向对象语言(Java、…

(二) 树莓派CM4调试

1. 参考资料资料汇总页面https://shumeipai.nxez.com/raspberry-pi-datasheets《bcm2711-peripherals.pdf》,下载地址https://datasheets.raspberrypi.com/bcm2711/bcm2711-peripherals.pdf《cm4io-datasheet.pdf》,下载地址https://datasheets.raspberrypi.com/cm4/cm4-data…

中国式报表有这么多种类型,你都知道吗?

中国式报表是一种在中国企业中使用的会计报告格式,但你真的了解它吗?你知道它有多少种类型吗?今天我们就一起来聊聊,中国式报表都包含哪些类型的报表吧!按样式来划分,中国式报表通常分为以下几类:1. 行式报表 行式报表也就是我们常说的清单式明细表,是最常见也是最简单…

JDBC加载MySQL驱动【底层实现】

JDBC4.0如何加载引入依赖<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version></dependency>上代码import java.sql.Connection;import java.sql.DriverManager;imp…