public class Filter {
private final Set<String> fields;
private final Map<String, String> search;
public Filter(String ... fields) {
this.fields = new HashSet<>(Arrays.asList(fields));
}
public void addSearch(String field, String value) {
if (field != null && value != null && fields.contains(field)) {
search.put(field, value);
}
}
public String toSQL() {
StringBuilder builder = new StringBuilder();
for (Map.Entry<String, String> entry : search) {
String field = entry.getKey(), value = entry.getValue();
if (builder.length() == 0) {
builder.append("WHERE ");
} else {
builder.append("AND ");
}
builder.append(field).append(" = '").append(value).append("'")
}
return builder.toString();
}
}
这是一个非常简单的解决方案,您肯定可以改进。 使用方法如下:
Filter filter = new Filter("color", "mileage" /* and other columns */);
filter.addSearch("color", color);
String sql = "SELECT * FROM Cars " + filter.toSQL();
你或许应该检查用户输入,以防止SQL注入和其他可能的滥用。
另一个更专业的解决方案是“对象关系映射”,在Java中使用JPA。 Google“JPA”,“Criteria API”,“Hibernate”或“ORM”。