我们有以下代码:
String templateQuery = "select * from my_table where col1=$1 or col2 like '%$2.$1'";
String tmp = templateQuery;
for(int i=1;i<=maxCols;i++) {
tmp = tmp.replaceAll("\\$"+i, data[i-1]);
}
这段代码可以正常工作,因为
maxCols
永远不会超过10。但是我的同事不同意我的说法,认为这段代码消耗了太多内存。你能帮我们吗?编辑:
我已将初始templateQuery更改为更实际的一个。其次,
templateQuery
可能是一个很大的字符串。编辑2:
感谢那些指出SQLInjection问题的人。
最佳答案
为什么不只使用带有替换参数的PreparedStatement
?
String templateQuery = "SELECT * FROM my_table WHERE col1 = ?";
PreparedStatement ps = con.prepareStatement(templateQuery);
for (int i = 0; i < data.length; i++) {
ps.setString(i + 1, data[i]);
}
ResultSet rs = ps.executeQuery();
如果像以前一样使用字符串替换,则容易受到SQL injection的攻击。
关于java - 高效地进行Java字符串替换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5830068/