[英]How to replace query parameter only if it exists using string replace All regex
[英]How can I purify a sql query and replace all parameters with '?' using regex
例如我想凈化這些查詢
SELECT * FROM mytable1 WHERE field1 = 5;
UPDATE mytable1 SET field1 ="data" WHERE field1 = 5;
INSERT INTO mytable1 VALUES("a", "\"b","c" );
並得到下面的結果
SELECT * FROM mytable1 WHERE field1 = ?;
UPDATE mytable1 SET field1=? WHERE field1 = ?;
INSERT INTO mytable1 VALUES(?,?,?);
...
如果您喜歡使用 3rd 方庫而不是使用正則表達式,您可以嘗試使用JSQLParser進行那種 sql 字符串修改。 下面是在各種語句中替換字符串和長值的示例。
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.LongValue;
import net.sf.jsqlparser.expression.StringValue;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.util.deparser.ExpressionDeParser;
import net.sf.jsqlparser.util.deparser.SelectDeParser;
import net.sf.jsqlparser.util.deparser.StatementDeParser;
public class TestTest {
public static void main(String[] args) throws JSQLParserException {
String sql_1 = "SELECT * FROM mytable1 WHERE field1 = 5;";
String sql_2 = "UPDATE mytable1 SET field1 ='data' WHERE field1 = 5;";
String sql_3 = "INSERT INTO mytable1 VALUES('a','b','c' );";
System.out.println(modify(sql_1));
System.out.println(modify(sql_2));
System.out.println(modify(sql_3));
}
public static String modify(String sql) throws JSQLParserException{
StringBuilder buffer = new StringBuilder();
ExpressionDeParser expressionDeParser = new ExpressionDeParser() {
@Override
public void visit(StringValue stringValue) {
this.getBuffer().append("?");
}
@Override
public void visit(LongValue longValue) {
this.getBuffer().append("?");
}
};
SelectDeParser selectDeparser = new SelectDeParser(expressionDeParser,buffer );
expressionDeParser.setSelectVisitor(selectDeparser);
expressionDeParser.setBuffer(buffer);
StatementDeParser stmtDeparser = new StatementDeParser(expressionDeParser, selectDeparser, buffer);
Statement stmt = CCJSqlParserUtil.parse(sql);
stmt.accept(stmtDeparser);
return stmtDeparser.getBuffer().toString();
}
}
// output:
//SELECT * FROM mytable1 WHERE field1 = ?
//UPDATE mytable1 SET field1 = ? WHERE field1 = ?
//INSERT INTO mytable1 VALUES (?, ?, ?)
有關更多示例,請訪問jsqlparser 的示例頁面。
對於 mvn 或 jar 下載mvnrepository
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.