Skip to content

当待替换的值里有字符串问号的时候,replaceFirst()的替换会错位 #12

@mobileharry

Description

@mobileharry

谢谢作者的无私付出。不过貌似这句有些问题:

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()。如有理解错误,请指正。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions