Если вы строите операторы where / и в вашем запросе на основе того, какие параметры выбрал пользователь, то, я полагаю, вы уже знаете, какие изменения нужно будет внести в запрос, чтобы желаемые данные. Если это так, то вы можете создать метод, который принимает опцию, которую пользователь запросил в качестве параметра метода, метод создает запрос и возвращает этот запрос.
//something similar to the following
public String buildQuery(int option){
StringBuilder sb = new StringBuilder();
sb.append("select fields from table");
switch(option){
case 1:
//build query and append to sb
sb.append("where clause for option1");
case 2:
//build query and append to sb
sb.append("where clause for option2");
default:
// build query using default
sb.append("default where clause");
}
return sb.toString();
}
// create the stored procedure
PreparedStatement ps = conn.prepareStatement(buildQuery(2));
ResultSet rs = ps.executeQuery();
Теперь, если вам нужно использовать введенные пользователем значения в запросе, вы можете временно сохранить их в списке или на карте, а затем установить их.
ps.setString(1,list.get(0));
ps.setString(2,list.get(1));
ResultSet rs = ps.executeQuery();
Возможно, существует более элегантное решение проблемы, но у нас есть приложение, которое запрашивает записи в базе данных, используя входные данные пользователя для построения запросов, и оно работает нормально в течение последних двух лет. Надеюсь, это поможет.