我有一个准备好的陈述,带有六个“?”在里面。并在所有位置将其替换为相同的字符串。

以下两种方法中的哪一种是首选:

pstmt = con.prepareStatement(QUERY.replaceAll("\\?", id));


要么

pstmt = con.prepareStatement(QUERY));
pstmt.setString(1, id);
pstmt.setString(2, id);
pstmt.setString(3, id);
pstmt.setString(4, id);
pstmt.setString(5, id);
pstmt.setString(6, id);

最佳答案

第二个,第一个很容易受到SQL注入的攻击。尤其是当idString时(看起来好像在这里)。

pstmt = con.prepareStatement(QUERY));
pstmt.setString(1, id);
pstmt.setString(2, id);
pstmt.setString(3, id);
pstmt.setString(4, id);
pstmt.setString(5, id);
pstmt.setString(6, id);


另外,由于语句查询缓存可以潜在地将语句重用于不同的ID,因此上述方法应具有更好的性能。对于第一个示例,情况并非如此。

关于java - replaceAll与setString,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25427880/

10-13 04:17