`

正则表达式替换sql语句中的参数

阅读更多
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

	public static void main(String[] args){
		Map<String,Object> param = new HashMap<String,Object>();
		/*List<String> list = new ArrayList<String>();
		list.add("10000");
		list.add("20000");
		list.add("30000");*/
		param.put("hrids", new String[]{"1000","2000","3000","4000"});
		param.put("scids", new String[]{"100000","200000","3000","4000"});
		param.put("beginDate", "'2010-03-20'");
		param.put("endDate", "'2010-03-30'");
		String sql="select from  atd_holiday where scids in($scids$) and hrids in ($hrids$) and valid_date between #beginDate# and #endDate#";
		Pattern pattern1 = Pattern.compile("\\$[a-zA-Z]+\\$");
		Matcher matcher1 = pattern1.matcher(sql);
		while(matcher1.find()){
			String paramStr = matcher1.group();
			String paramName=paramStr.replaceAll("\\$", "");
			System.out.println(paramName);
			Object value=param.get(paramName);
			if(value instanceof String){
				sql=sql.replace(paramStr,"'"+value.toString()+"'" );
			}else if(value instanceof Collection){
				Collection collection=(Collection)value;
				StringBuffer sb = new StringBuffer();
				int i=0;
				for(Iterator it=collection.iterator();it.hasNext();i++){
					Object obj=it.next();
					sb.append("'"+obj.toString()+"'");
					if(i<collection.size()-1){
						sb.append(",");
					}
				}
				sql=sql.replace(paramStr,sb.toString());
			}else if(value instanceof Object[]){
				Object[] objArray=(Object[])value;
				StringBuffer sb = new StringBuffer();
				for(int i=0;i<objArray.length;i++){
					sb.append("'"+objArray[i].toString()+"'");
					if(i<objArray.length-1){
						sb.append(",");
					}
				}
				sql=sql.replace(paramStr,sb.toString());
			}
		}

		Pattern pattern2 = Pattern.compile("#[a-zA-Z]+#");
		Matcher matcher2=pattern2.matcher(sql);
		while(matcher2.find()){
			String paraStr=matcher2.group();
			String paramName=paraStr.replace("#", "");
			System.out.println(paramName);
			Object value=param.get(paramName);
			sql=sql.replace(paraStr, value.toString());
		}

		System.out.println(sql);

	}
}

 

分享到:
评论

相关推荐

    用正则表达式提取SQL

    标题“用正则表达式提取SQL”涉及到的是在编程中如何使用正则表达式来从文本或代码中抓取SQL语句的相关知识。在IT领域,正则表达式(Regular Expression)是一种强大的文本处理工具,它能快速地匹配、查找、替换或者...

    SQL 语法分析,正则表达式解析C#文件;正则表达式实现的语法分析引擎

    在这个主题中,我们将深入探讨SQL语法分析、正则表达式的应用以及如何在C#中使用正则表达式来解析文件。 首先,SQL语法分析是理解和执行SQL查询的关键步骤。当一个SQL语句被提交到数据库管理系统时,系统会对其进行...

    Oracle数据库正则表达式

    使用正则表达式可以编写简洁、强大的 SQL 语句,提高数据处理的效率和灵活性。熟练使用正则表达式可以帮助用户快速搜索、替换和验证数据,并提供高度的灵活性。 在 Oracle 数据库中,正则表达式的应用非常广泛,...

    JS、replace利用正则表达式替换SQL所有参数为指定格式的数据

    SQL参数格式 例如:select * from tb where nd=:nd and yd=:yd 想一次性把所有SQL语句中参数(带冒号)全部换成数据, 开始 选定用正则表达式。 原先写这样 代码如下: strsql.replace(/(:\w+)/g,(“$1”).substring(1)...

    SQL修改表语句和正则表达式

    本文将深入探讨SQL修改表语句以及正则表达式在数据处理中的应用。 **SQL修改表语句** SQL修改表语句允许我们动态地更新数据库中的表结构,以便适应业务需求的变化。以下是一些常见的SQL命令: 1. **添加列 (ALTER...

    Java源代码案例 - 使用正则表达式解析sql语法树.zip

    在"Java源代码案例 - 使用正则表达式解析sql语法树.zip"这个压缩包中,我们可以推测包含了一个使用Java实现的SQL语句解析器,可能通过正则表达式解析SQL语句的语法结构。 在SQL(Structured Query Language)中,...

    正则表达式在oracle中的应用

    2. **错误排查**:正则表达式中的错误排查通常比标准SQL语句更加困难。开发者需要熟悉正则表达式的语法和特性,以便能够准确地定位和解决问题。 3. **性能考虑**:尽管正则表达式提供了强大的查询能力,但在某些...

    运用正则表达式匹配所有表名

    写出匹配SQL语句中的所有表名,备忘记录 折磨了好久,正则表达式如下: 代码如下: \*\s+from\s+[\w\[\]]*\.?[\w\[\]]*\.?\[?(\b\w+)\]?[\r\n\s]* 支持各种表达式 SELECT * FROM Config SELECT * FROM

    利用正则表达式对SQL解释的方法

    在SQL解析场景中,通过精心设计的正则表达式能够高效地识别并提取出SQL语句的关键部分,如关键字、表名、列名等。 #### SQL解析需求 假设我们需要解析一系列SQL语句,并将其转换为一种更易读的格式,或者从中提取...

    mysql update正则替换sql语句

    在这条语句中,REPLACE函数用于替换文本,它接受三个参数:字段名、被替换的文本和替换后的文本。WHERE子句中的REGEXP指定了匹配规则,只有当url字段中的内容符合这个正则表达式时,REPLACE函数才会执行替换操作。 ...

    C++ BOOST 正则表达式使用教程

    这定义了一个正则表达式,用于匹配 SQL 语句的 select 部分。 使用 `regex_match` 函数来匹配输入字符串: ```cpp if (regex_match(in.c_str(), what, expression)) { // 匹配成功 } else { // 匹配失败 } ``` 在...

    Oracle 10g 针对正则表达式的支持分析

    - **集成到SQL语句中**:可以直接在SQL查询中使用正则表达式进行条件过滤,无需编写额外的程序代码。 ##### 3.2 实现方法 - **REGEXP_LIKE**:用于判断一个字符串是否符合指定的正则表达式模式。 - **REGEXP_INSTR*...

    MySQL中使用replace、regexp进行正则表达式替换的用法分析

    replace函数可以通过简单的字符串替换来更新数据,而regexp则可以使用复杂的正则表达式模式进行更灵活的数据匹配和替换。 首先,replace函数是MySQL中的字符串函数,用于在字符串中查找指定的子字符串并替换为另一...

    通过Java正则表达式去掉SQL代码中回车换行和多余空格

    特别是当SQL语句中存在多余的空格、回车和换行符时,不仅会影响SQL的可读性,还可能导致代码执行出现错误。在Java中,可以利用正则表达式来解决这一问题,正则表达式是一种强大的文本处理工具,能够进行复杂的模式...

    C#正则表达式提取网页数据

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换或提取字符串中的特定模式。在C#中,`System.Text.RegularExpressions`命名空间提供了`Regex`类来支持正则表达式的操作。通过创建`Regex`对象并调用其方法...

    使用正则表达式匹配tsql注释语句

    正则表达式(Regular Expression)是一种强大的文本处理工具,可以用来匹配、查找、替换等操作,包括匹配SQL中的注释语句。在本文中,我们将探讨如何使用正则表达式有效地匹配T-SQL(Transact-SQL)中的注释。 首先...

    用C#正则表达式实现的百度体育新闻的抓取

    在本文中,我们将深入探讨如何使用C#编程语言和正则表达式来实现百度体育新闻的抓取。C#是一种广泛应用于Windows平台的面向对象的编程语言,它提供了丰富的类库支持网络通信和数据处理。正则表达式则是用于文本模式...

    基于正则表达式的数据处理应用.pdf

    通过将正则表达式与SQL语句结合使用,可以在保证查询效率的同时,简化查询语句的复杂度,并便于后续的维护和错误排查。 综上所述,正则表达式在数据处理中的应用不仅限于数据库查询,在其他需要进行字符串匹配的...

    API文档Ajax+jQuery+正则表达式+SQL+JDK1.7

    本压缩包集合了多种API文档,包括Ajax、jQuery、正则表达式、SQL以及JDK 1.7的相关内容,对于学习和提升IT技能大有裨益。 首先,我们来看`jQuery文档.chm`,jQuery是一个轻量级、高性能的JavaScript库,它简化了...

Global site tag (gtag.js) - Google Analytics