使用 druid 的过滤器拦截 sql, 比如
update a set b='a' where id=1
我想把 a 换成 f 修改了 但是不起作用,
首先,你需要创建一个类,继承自com.alibaba.druid.filter.Filter
,并重写相关的方法,比如init
、doFilter
和destroy
。在doFilter
方法中,你可以获取到SQL语句并进行修改。
import com.alibaba.druid.filter.FilterAdapter;
import com.alibaba.druid.proxy.jdbc.StatementProxy;
import com.alibaba.druid.sql.parser.ParserException;
import com.alibaba.druid.sql.parser.SQLParserUtils;
import com.alibaba.druid.sql.parser.SQLStatementParser;
public class TableNameRewriteFilter extends FilterAdapter {
@Override
public void doFilter(StatementProxy statementProxy, FilterChain chain) throws SQLException {
String originalSql = statementProxy.getSql();
// 修改SQL语句,替换表名
String modifiedSql = rewriteTableName(originalSql);
statementProxy.setSql(modifiedSql);
chain.doFilter(statementProxy);
}
private String rewriteTableName(String sql) {
try {
SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, "mysql");
SQLStatement sqlStatement = parser.parseStatement();
// 在这里处理SQL语句,替换表名
// ...
return sqlStatement.toSQL();
} catch (ParserException e) {
throw new SQLException("Parse SQL failed", e);
}
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。