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ż)