Wywołując executeQuery(sql) faktycznie wywołujesz metodę na Statement - nie na PreparedStatement . Więc wyrzucasz już przypisaną wartość parametru i wykonujesz zapytanie, w którym symbol zastępczy ? pozostaje nieprzeanalizowane - więc pojawia się ten błąd.
Zmień
ResultSet results = state.executeQuery(sql);
do
ResultSet results = state.executeQuery();
i powinno być dobrze.
(I z powodu
resultname = state2.executeQuery(sql2);
musi być
resultname = state2.executeQuery();
również)