首页 > 解决方案 > 使用计数器变量的替代品

问题描述

我有一段有效的代码,但是,我想知道是否可以在不使用计数器变量的情况下使其变得更好。我有一张“过滤器”地图,如果地图中至少有一件事,我想改变我的 SQL 字符串。

StringBuilder sb = new StringBuilder("SELECT * from Table");

if (filters.size() >= 1) {
    int counter = 0;  //I don't want to use this

    for (String key : filters.keySet()) {
        if (counter == 0) {
            sb.append(" WHERE " + key + "=?");
            counter= 1;
            continue;
        }

        sb.append(" AND " + key + "=?");
      }
  }

标签: java

解决方案


注意:如果密钥是由客户端提供的,则该请求很容易受到 SQL 注入的攻击。他们应该被消毒。

你可以使用这个"1 = 1"技巧。

StringBuilder sb = new StringBuilder("SELECT * from Table WHERE 1 = 1");
for(String key : filters.keySet()){
  sb.append(" AND " + key + "=?");
}

"0 = 1"如果您想链接一些OR语句,也一样)。


推荐阅读