`
53873039oycg
  • 浏览: 841473 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java简单应用之去除SQL文件注释

 
阅读更多

     工作中可能有些时候需要提供Sql脚本,某些脚本中可能有注释,可以使用Java对Sql脚本做简单的处理,把Sql文件中的注释去掉。

     以Oracle脚本为例,Mysql脚本我没写,Oracle中常见注释有2种注释。

     单行注释: --
     多行注释:/**/

     只要把出现注释的地方去掉就可以了,详情见代码,代码注释写的很详细了。

    

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Sql语句处理 {
	public static void main(String[] args) throws Exception {
		Sql语句处理 t = new Sql语句处理();
		String content = new String(t.processSqlContent(
				"f:/saveFile/tmp/c/testdb.sql", "utf-8"));
		System.out.println(content);
		t.writeStrToFile(content,"f:/saveFile/tmp/c/testdb.sql", "utf-8");
	}

	public String processSqlContent(String filePath, String charSet)
			throws Exception {
		if (charSet == null) {
			charSet = "utf-8";
		}
		BufferedReader br = new BufferedReader(new InputStreamReader(
				new FileInputStream(filePath), charSet));
		StringBuffer contentBuffer = new StringBuffer(5120);
		String temp = null;
		String tmpResult = null;
		boolean isStart = false;
		while ((temp = br.readLine()) != null) {
			//去空格和;
			tmpResult = new String(temp.replaceAll(";", " ").replaceAll("\\s{2,}", " "));
			if (tmpResult != null) {
				//去除同一行/* */注释
				if(tmpResult.indexOf("/*")!=-1&&tmpResult.indexOf("*/")!=-1)
				{
					//最小匹配
					tmpResult=tmpResult.replaceAll("\\/\\*.*?\\*\\/", "");
				}else if (tmpResult.indexOf("/*") != -1&&tmpResult.indexOf("*/") == -1&&tmpResult.indexOf("--")==-1) {
					// /*开始
					isStart = true;
				}else if(tmpResult.indexOf("/*")!=-1&&tmpResult.indexOf("--")!=-1&&tmpResult.indexOf("--")<tmpResult.indexOf("/*"))
				{
					//同时存在--/*
					tmpResult=tmpResult.replaceAll("--.*", "");
				}
				if (isStart && tmpResult.indexOf("*/") != -1) {
					// */结束
					isStart = false;
					continue;
				} 
				// 去除同一行的--注释
				tmpResult = new String(tmpResult.replaceAll("--.*", ""));
			}
			if (!isStart) {
				//保留换行符
				//contentBuffer.append(tmpResult).append("\r\n");
				//无换行符
				contentBuffer.append(tmpResult);
			}
		}
		temp = contentBuffer.toString();
		//保留换行符
		//temp = new String(temp.replaceAll("\\s{2,}\\r\\n"," "));
		//无换行符
		temp = new String(temp.replaceAll("\\s{2,}", " "));
		return temp;
	}

	public String getFileContent(String fileName, String chartSet)
			throws Exception {
		if (chartSet == null) {
			chartSet = "utf-8";
		}
		StringBuffer buffer = new StringBuffer(5120);
		String line = null;
		InputStream is = new FileInputStream(fileName);
		BufferedReader reader = new BufferedReader(new InputStreamReader(is,
				chartSet));
		while ((line = reader.readLine()) != null) {
			buffer.append(line).append("\r\n");
		}
		return buffer.toString();
	}

	public void writeStrToFile(String str, String filePath, String charsetName)
			throws Exception {
		if (charsetName == null) {
			charsetName = "utf-8";
		}
		OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(
				filePath), charsetName);
		out.write(str);
		out.close();
	}
}

    测试文件:

  

select
--注释/*注释*/
 * --去全部
/*注释*/
/*测试--*/
  from emp --从emp取数据/**测试
/*
  测试注释
  --注释*/
/*--测试*/
/*多行注释*/
/**2B注释*/
/* *
   *取dept=10 日期小于1998的数据
   */
/*select *
   from emp
  where 1 = 1
    and deptno = 12
    --and hiredate < to_date('2013-10-01', 'yyyy-mm-dd')*/
 where /**/
 1 = /*注释--这也是注释*/
/*注释*/
 1 --1=1
 and deptno = /*--*/ /*注释---*/
 10 --部门
/*
    注释//嵌套注释*/
 and /*时间字段*/
 hiredate /*测试注释/*测试注释*/
 < /*日期小于1998*/
 to_date('1998-10-01', 'yyyy-mm-dd' /*年月日格式*/)

  处理结果:

 

     写的不好的地方请指出,代码写的很匆忙,如有错误也请指出,转载请注明出处。谢谢。

     全文完。

 

   

 

  • 大小: 17.1 KB
分享到:
评论

相关推荐

    java_SQL文件批量删除注释

    java_SQL文件批量删除注释 ,实现自动批量处理Sql脚本中的注释,方便发布您自己的脚本,简单好用。亲测可以用的,谢谢支持。

    SQL转Java代码小工具

    因为经常在plsql写sql然后放到java 文件当成String去执行 所以经常要花时间格式化,然后找到了网上的一篇文章 ,工具非常不错: ... 后来我做了一些小的改进 包括:1。自动去除sql的注释 2。自动帮你自定义好变量

    mybatis动态sql及其JAVA示例

    ### MyBatis动态SQL及其Java示例 #### 一、MyBatis简介及动态SQL概述 MyBatis是一个优秀的持久层框架,它支持定制化的SQL、存储过程以及高级映射,极大简化了JDBC代码和手动设置参数以及获取结果集的过程。其中,...

    简单版mybatis-generator 带有中文注释

    MyBatis Generator(MBG)是一款强大的工具,用于自动生成MyBatis的SQL映射文件、Java模型类和DAO接口。这个"简单版Mybatis-generator带有中文注释"是MBG的一个修改版本,旨在简化配置过程,并且为中文用户提供更易...

    Oracle-SQL简单查询语句处理.pdf

    总的来说,Oracle SQL的简单查询语句是数据处理的核心,通过选择、投影、连接和计算等操作,可以从关系型数据库中提取所需信息,同时通过列别名、连接操作符和去除重复行等技术,可以优化查询结果并提高可读性。...

    mybatis-generator-core-1.3.2(含有源码--生成注释、自定义sql)

    mybatis-generator-core-1.3.2(含有源码--生成注释、自定义sql) 只需修改2个文件即可,生成了mysql字段的注释,以及去除多余无用的sql,只留下增删改查,文件内含源码和已经打好的jar包,直接使用即可

    验证码识别之java实现修补部分

    根据提供的信息,我们可以总结出以下关于“验证码识别之Java实现修补部分”的相关知识点: ### 验证码识别技术概述 验证码(CAPTCHA)是一种用于区分人类用户与自动程序的技术手段,广泛应用于网站登录、表单提交...

    java开发中的一些常用小技巧

    ### Java开发中的常用小技巧详解 #### JDBC使用技巧与注意事项 **1. 使用PreparedStatement代替Statement**...以上这些技巧不仅可以帮助开发者编写更健壮、易于维护的Java应用程序,还能提高程序的整体性能和安全性。

    intellij idea 利用generatorConfig反向生成java类

    需要注意的是,在实际应用中可能还需要根据具体的项目需求对配置文件进行调整,比如更改目标包名、项目路径等。此外,还可以进一步扩展功能,如生成 Service 层接口与实现类等,从而更好地满足项目开发的需求。

    自动化代码生成工具mybatis-generator-gui-master

    mybatis-generator-gui是基于...* 可选的去除掉对版本管理不友好的注释,这样新增或删除字段重新生成的文件比较过来清楚 * 目前已经支持Mysql、Oracle、PostgreSQL与SQL Server,暂不对其他非主流数据库提供支持。

    阿里巴巴Java开发手册终极版v1.3.0_编程规范_java_

    《阿里巴巴Java开发手册终极版v1.3.0》是一份详尽的编程规范文档,旨在为Java开发者提供一套统一的编码标准,以提升代码的可读性、可维护性和团队协作效率。这份规范不仅涵盖了基础的编程约定,还包含了最佳实践和...

    Oracle PL/SQL常用47个工具包

    12. **DBMS_DEBUG_JDWP**: 调试工具,允许远程Java Debug Wire Protocol (JDWP)调试器连接到PL/SQL过程。 13. **DBMS_STATS**: 用于收集和管理表和索引的统计信息,优化查询计划。 14. **DBMS_ERROR_LOG**: 将错误...

    java web ppt

    最后,JSP特有的隐式注释`&lt;%-- --%&gt;`,这种注释在编译后将被完全去除,不会出现在生成的Java文件中。 接下来,我们讨论JSP中的scriptlet。Scriptlet是嵌入在JSP页面中的Java代码片段,主要有三种形式:`&lt;% %&gt;`、`! ...

    Java EE常用框架.xmind

    Java EE常用框架 WebService 介绍 基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用 术语 XML. Extensible Markup Language -扩展性标记语言 WSDL – ...

    druid-heartbeat-1.0-SNAPSHOT.rar

    3. **SQL解析**:Druid内置了SQL解析器,可以解析SQL语句并进行优化,如自动去除空格、注释,支持子查询转换等功能,提高了SQL处理的效率和准确性。 4. **健康检查**:"heartbeat"在Druid中代表心跳检测,它用于...

    myBatis自动生成器

    这个工具可以根据数据库表结构自动生成相应的Java代码,包括实体类、Mapper接口、Mapper XML文件以及对应的SQL语句,极大地提高了开发效率。下面将详细介绍MyBatis自动生成器的相关知识点。 首先,MyBatis是一个...

    Java程序员面试ppt

    Java程序员面试是一个全面考察应聘者技术能力、问题解决能力和沟通技巧的过程。面试通常包括投递简历、电话通知、笔试、一轮或多轮面试等步骤。在面试中,表现出积极主动的态度和解决问题的决心非常重要。 面试题...

    mybatis逆向工程

    在实际应用中,有时我们需要去除生成的代码中的example类和不必要的注释,以保持代码的简洁性。 首先,让我们了解一下MyBatis逆向工程的基本概念。MyBatis Generator (MBG) 是一个能够根据数据库表结构自动生成Java...

    阿里巴巴 Java 开发手册1.4.0

    《阿里巴巴Java开发手册1.4.0》是阿里巴巴集团针对Java开发者发布的一份详细编码规范与最佳实践指南。这份手册自2018年6月更新以来,深受广大Java程序员的欢迎,它不仅包含了基础的编程规则,还涵盖了架构设计、性能...

Global site tag (gtag.js) - Google Analytics