String sql ="SELECT NAME, ADDRESS, COL1 FROM USER WHERE SSN IN ('11111111111111', '22222222222222');";
Select select = (Select) CCJSqlParserUtil.parse(sql);
//Start of value modification
StringBuilder buffer = new StringBuilder();
ExpressionDeParser expressionDeParser = new ExpressionDeParser() {
@Override
public void visit(StringValue stringValue) {
this.getBuffer().append("XXXX");
}
};
SelectDeParser deparser = new SelectDeParser(expressionDeParser,buffer );
expressionDeParser.setSelectVisitor(deparser);
expressionDeParser.setBuffer(buffer);
select.getSelectBody().accept(deparser);
//End of value modification
System.out.println(buffer.toString());
//Result is: SELECT NAME, ADDRESS, COL1 FROM USER WHERE SSN IN (XXXX, XXXX)
4条答案
按热度按时间fdx2calv1#
使用JSQLParser(V0.8.9)可以解决您的问题:
这将替换SQL中找到的所有字符串值。要替换其他类型的数据(如长整型值),请覆盖
ExpressionDeParser
中相应的访问方法。在这种情况下不要使用regexp,因为它很快就会变得很难维护。
omvjsjqw2#
正确答案取决于你想更换多少。比如:
我会很好地取代社会安全号码。我总是用正则表达式代码来
regexpal.com
来调整它并解决问题。
如果您需要替换大量的敏感信息,并且如果有很多情况,一定要开始考虑使用解析器来解析SQL查询字符串。(如Anirudh推荐的jsqlparser。)
roqulrg33#
字符串sqlDebit =从表中选择 *,其中和billing_cycle_start_date介于:startDate和:endDate之间
Java语言:
如果您有任何问题,请联系我们。如果您有问题,请联系我们。
fdbelqdn4#
使用prepare语句,您可以将查询字符串中的“?”替换为您的值。使用数字指定您所引用的“?”。它们按从右到左的顺序排列。
例如:“SELECT姓氏,名字FROM人员.联系人WHERE姓氏=?与名字=?”
“最后一个名称值”;(2,“名字值”);参见以下完整示例: