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」。