正则表达式替换SQL语句中的字段
我想用正则表达式匹配一个insert的SQL语句,能够自动地将变量赋给对应的字段,比如
SQL=“insert into table(item1,item2,item3) values(:item1,:item2,:item3)”
map.put(item1,"111")
map.put(item2,"222")
map.put(item3,"333")
我想用正则表达式自动的将SQL语句中的:item1,:item2,:item3替换成map中对应的“111”,"222","333"
请问我该怎么写正则表达式的匹配语句和 对应的方法。
搞错了。忘了加上非捕获组。刚才代码未验证。呵呵,偷懒了。
[code="java"]String SQL="insert into table(item1,item2,item3) values(:item1,:item2,:item3)";
Map map = new HashMap();
map.put("item1","111");
map.put("item2","222");
map.put("item3","333");
Pattern p=Pattern.compile("(?::)(\\w+)(?:\\b)");
Matcher m=p.matcher(SQL);
StringBuffer result=new StringBuffer();
while (m.find()) {
String key=m.group(1);
m.appendReplacement(result,(String)map.get(key));
}
m.appendTail(result);
String resultSql=result.toString();
System.out.println(resultSql);[/code]
[code="java"]Pattern p=Pattern.compile(":(\w+)\b");
Match m=p.matcher(SQL);
StringBuffer result=new StringBuffer();
while (m.find()) {
String key=m.group(1);
m.appendReplacement(result,map.get(key));
}
m.appendTail(result);
String resultSql=result.toString();[/code]
不建议这么做,可能导致未验证BUG。至少
对于这样的SQL是不适用的:
SQL=“insert into table(item1,item2,item3) values('AAA:item1',:item2,:item3)”.
会把字符串中的值替换掉。
SQL还是用preparedStatement方式注入参数比较好。
[quote]
[color=red]不建议这么做,可能导致未验证BUG。至少
[/color][/quote]
同上,这种做法无法防范SQL注入攻击
用PreparedStatement多好啊
同样可以满足你的需求
而且无需考虑单引号的转义,sql注入攻击这些问题