开发者社区> 问答> 正文

设置filter时使用 类似 !wall 时逻辑处理没看懂 ,怎么跟设置成wall一样处理了

DruidAbstractDataSource #setFilters判断filters是否以!开始后的处理逻辑没看明白,还是说不允许使用!来排除filter

public void setFilters(String filters) throws SQLException { if (filters != null && filters.startsWith("!")) { filters = filters.substring(1); this.clearFilters(); } this.addFilters(filters); }

原提问者GitHub用户601724080

展开
收起
山海行 2023-07-05 19:47:54 87 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    为了解决这个问题,您可以尝试以下方法:

    1. 使用字符串拼接:将!wall 和您的过滤条件拼接在一起,这样在执行 filter 查询时,查询条件将完全匹配您的设置。例如:

    String filter = "!wall";
    if (condition) {
    filter += " AND column1 = 'value1' AND column2 = 'value2'";
    } else {
    filter += " AND column1 = 'value3' AND column2 = 'value4'";
    }
    CopyCopyCopy

    1. 使用逻辑运算符:使用逻辑运算符 (如 AND 和 OR) 将!wall 和您的过滤条件组合在一起,这样在执行 filter 查询时,查询条件将完全匹配您的设置。例如:

    String filter = "!wall";
    if (condition) {
    filter += " AND column1 = 'value1' AND column2 = 'value2'";
    } else {
    filter += " AND column1 = 'value3' AND column2 = 'value4'";
    }
    CopyCopyCopy

    1. 使用查询语句的逻辑处理:在执行查询时,使用逻辑运算符将!wall 和您的过滤条件组合在一起。例如:

    String query = "SELECT * FROM table_name WHERE " + filter;
    if (condition) {
    query += " AND column1 = 'value1' AND column2 = 'value2'";
    } else {
    query += " AND column1 = 'value3' AND column2 = 'value4'";
    }

    2023-07-30 15:17:27
    赞同 展开评论 打赏
  • DruidAbstractDataSource的setFilters方法用于设置过滤条件,如果filters字符串开头为"!",则将其去掉。这是因为Druid采用了一种特殊的过滤方式,即使用"!"字符来排除过滤条件。例如,如果需要排除名称为"test"的SQL语句,则可以使用"test!"作为过滤条件。如果使用普通的过滤条件,则需要在过滤条件开头使用"-"或者"("等字符来表示。

    2023-07-11 09:52:39
    赞同 展开评论 打赏
  • 这个为了方便动态设置filters时可以清楚原来的filter

    原回答者GitHub用户wenshao

    2023-07-06 11:06:38
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载