java - 使用计数器变量的替代品
问题描述
我有一段有效的代码,但是,我想知道是否可以在不使用计数器变量的情况下使其变得更好。我有一张“过滤器”地图,如果地图中至少有一件事,我想改变我的 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 + "=?");
}
}
解决方案
注意:如果密钥是由客户端提供的,则该请求很容易受到 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
语句,也一样)。
推荐阅读
- linux - 提取斜线之间的文本块
- asp.net-mvc - 表单验证不断要求 MVC 上的所需 ID
- python - YYYY-M-DTHH:MM:SS 列的排序问题
- c# - 如何使用 Json.NET 解析没有标题的 JSON 数据
- service - 关于系统架构的建议
- python - 如何在 Windows 上用 Python 显示图片?
- amazon-web-services - 通过 SQL Server 身份验证安装 Sensenet 服务包时出现 UTC 偏移错误
- typo3 - TYPO3 前端编辑新闻记录 (ext:frontend_editing)
- loopbackjs - 如何在环回 4 中指定环境变量?
- javascript - 如何避免在 javascript 滑块中使用全局变量