`

正则表达式替换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);

	}
}

 

分享到:
评论

相关推荐

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

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

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

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

    mysql update正则替换sql语句

    主要介绍了mysql update正则替换sql语句的相关资料,需要的朋友可以参考下

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

    本文实例讲述了MySQL中使用replace、regexp进行正则表达式替换的用法。分享给大家供大家参考,具体如下: 今天一个朋友问我,如果将数据库中查到的类似于“./uploads/110100_cityHotel_北京富豪华宾馆.jpg”这样的...

    C#使用正则表达式隐藏手机号中间四位为*

    您可能感兴趣的文章:angularJs自定义过滤器实现手机号信息隐藏的方法mysql sql语句隐藏手机号码中间四位的方法php实现替换手机号中间数字为*号及隐藏IP最后几位的方法C#隐藏手机号、邮箱等敏感信息的实现方法PHP...

    在MySQL中用正则表达式替换数据库中的内容的方法

    PS:下面是转过来的,用于记录下,这个不是正则的初衷,只是用了REGEXP而已,正则的更灵活更方便 将comment表中的author_url包含www.sohu.com的记录,其中的sohu替换为sina,一个语句搞定~ update comment set ...

    replace MYSQL字符替换函数sql语句分享(正则判断)

    代码如下:Update dede_addonsoft SET dxylink=REPLACE(dxylink, ‘.zip’, ‘.rar... :正则匹配,把field字段里的 .rar 替换为 .7z MySQL正则表达式替换,字符替换方法 两句SQL,都是字符替换,比较好用。 update com

    VB增强搜索插件 v1.5.0.59

    介绍 这是一个VB6的插件, 为VB6提供了增强的 搜索支持. 此插件支持的功能 普通/模式搜索字符串 正则搜索、替换字符串 ...修改了正则表达式,查找,替换时产生的误差. 修改了通过插件工具栏启动出错的问题.

    风越ASP代码生成器 2.4

    批量查找替换,支持正则表达式 批量文件、文件夹改名,支持正则表达式 正则表达式测试器(可设置、保存常用正则表达式) 获取键盘的按键值 网页隐藏资源下载,可下载无法直接得到URL的SWF、图片、音乐等资源 ...

    风越ASP代码生成器FireAspCreatorv2.9.rar

    批量查找替换,支持正则表达式 批量文件、文件夹改名,支持正则表达式 正则表达式测试器(可设置、保存常用正则表达式) 获取键盘的按键值 网页隐藏资源下载,可下载无法直接得到URL的SWF、图片、音乐等资源 获取...

    风越.Net代码生成器 [FireCode Creator] V1.3 精简版

    批量查找替换,支持正则表达式 批量文件、文件夹改名,支持正则表达式 正则表达式测试器(可设置、保存常用正则表达式) 获取键盘的按键值 网页隐藏资源下载,可下载无法直接得到URL的SWF、图片、音乐等资源 ...

    风越.net代码生成器v2.9

    批量查找替换,支持正则表达式 批量文件、文件夹改名,支持正则表达式 正则表达式测试器(可设置、保存常用正则表达式) 获取键盘的按键值 网页隐藏资源下载,可下载无法直接得到URL的SWF、图片、音乐等资源 ...

    风越ASP代码生成器2.8

    批量查找替换,支持正则表达式 批量文件、文件夹改名,支持正则表达式 正则表达式测试器(可设置、保存常用正则表达式) 获取键盘的按键值 网页隐藏资源下载,可下载无法直接得到URL的SWF、图片、音乐等资源 ...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例085 使用正则表达式替换字符串 101 实例086 使用正则表达式拆分字符串 102 实例087 使用正则表达式验证输入字母 102 实例088 使用正则表达式验证中文汉字输入 103 实例089 使用正则表达式验证输入字符串 104 3.7...

    Perl 实例精解(第三版).pdf

    对每个主题都使用了范例说明,从Perl变量、正则表达式,到编写报表、CGI脚本和网络应用,并对范例程序进行了解释。读者可以很容易地通过这些范例掌握Perl语言的语法。附录含有完整的函数和定义、命令行开关、特殊...

    php网络开发完全手册

    15.3.3 执行SQL语句 242 15.3.4 获得查询结果集中的记录数 243 15.3.5 获得结果集中的某一条记录 244 15.3.6 逐行获取结果集中的每一条 15.3.6 记录 245 15.3.7 结果集的分页 248 15.3.8 用户动态添加记录 249 15.3....

Global site tag (gtag.js) - Google Analytics