我们有以下代码:

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/

10-10 03:49