Musisz użyć:
preparedStatement.executeQuery();
zamiast
preparedStatement.executeQuery(login);
kiedy przekazujesz ciąg do executeQuery()
to zapytanie jest wykonywane dosłownie, a zatem ?
jest wysyłany do bazy danych, która następnie tworzy błąd. Przekazując ciąg zapytania, nie wykonujesz "buforowanej" przygotowanej instrukcji, dla której przekazałeś wartości.