Как отфильтровать поиск, введя все данные столбца в приложении Java-SQL? - PullRequest
0 голосов
/ 10 октября 2019

Я пытался решить эту проблему последние пару дней. У меня есть функция SerachUser, где я вводю все данные, такие как возраст, пол, город и интересы, в каждую строку и проверяю их в команде выбора запроса.

Если данные есть, я их распечатываю.

К сожалению, поиск не работает полностью. Например, у пользователя моей таблицы нет пола 'F'. Но если я наберу 'F', я все равно получу данные вместо отображения "ResultSet in empty в Java".

Ниже приведен краткий код, который я сделал.

try{
    conn = DriverManager.getConnection(DB_URL,"shankarv5815","1807985");
    st = conn.createStatement();  
    rs = st.executeQuery("Select loginID, f_name, l_name from users where gender = '" + 
    searchUser.getGender() + "' and age between '" + min + "' and '" + max + "' and city = '" + 
    searchUser.getCity() + "' and interest1 = '" + searchUser.getInterest1() + 
    "' or interest2 = '" + searchUser.getInterest1() + "' or interest3 = '" + 
    searchUser.getInterest1() + "' and loginID != '" + curUser + "'");  



    if (rs.next() == false) {
       System.out.println("ResultSet in empty in Java");
    } 
    else {

          do {
              String id = rs.getString(1);
              String fName = rs.getString(2);
              String lName = rs.getString(3);
              System.out.print(id +" ," + fName + ", " + lName);
              System.out.println();
             } while (rs.next());
         }                
  }
  catch(SQLException e){
       e.printStackTrace();
  }
  finally
  {
    try
      {
       conn.close();
       st.close();
       rs.close();    
      }
    catch(SQLException e)
      {
       e.printStackTrace();
      }           
 } 

1 Ответ

2 голосов
/ 10 октября 2019

Сокращенная версия вашего запроса:

Select * from users
Where gender = 'F'
And interest1 = 'FISHING'
Or interest2 = 'FISHING'

Однако, AND имеет более высокий приоритет, чем OR, поэтому этот запрос эквивалентен:

Select * from users
Where ( gender = 'F' And interest1 = 'FISHING')
Or interest2 = 'FISHING'

Что вам нужно сделатьэто добавить скобки, так:

Select * from users
Where gender = 'F'
And ( interest1 = 'FISHING' Or interest2 = 'FISHING')

Кстати, вы также широко открыты для атаки с использованием SQL-инъекций, включив условия поиска непосредственно в оператор SELECT (см. Что такое SQLинъекция? ).

Намного лучше было бы привыкнуть всегда использовать PreparedStatement.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...