Twój problem polega na tym, że przygotowujesz oświadczenie z
preparedStatement = dbConnection.prepareStatement(selectSQL);
co jest poprawne, ale kiedy próbujesz wykonać PreparedStatement, podajesz selectSQL
ciąg ponownie:
rs = preparedStatement.executeQuery(selectSQL);
To jest niepoprawne. Przygotowałeś już instrukcję, więc kiedy nadejdzie czas na jej wykonanie, po prostu to zrobisz
rs = preparedStatement.executeQuery();