谢谢作者的无私付出。不过貌似这句有些问题:
sql = sql.replaceFirst("\?", Matcher.quoteReplacement(paramValueStr));
假设SQL为: SELECT * FROM t WHERE c1 = ? AND c2 = ?
假设2个查询条件分别为字符串 '?'和数字100。
第一次循环,SQL被替换为:SELECT * FROM t WHERE c1 = '?' AND c2 = ?
第二次循环,SQL被替换为:SELECT * FROM t WHERE c1 = '100' AND c2 = ?
另外,当SQL是类似 select * from t where a="你是王者吗?" and b=? and c=? 的时候,仅适用?来定位也可能会不准确。
建议使用精准替换操作,而不是简单的replaceFirst()。如有理解错误,请指正。