Durch Aufruf von executeQuery(sql) Sie rufen tatsächlich eine Methode für Statement auf - nicht auf PreparedStatement . Sie werfen also den bereits zugewiesenen Parameterwert weg und führen eine Abfrage aus, bei der der Platzhalter ? ist bleibt ungeparst - also erhalten Sie diesen Fehler.
Ändern
ResultSet results = state.executeQuery(sql);
zu
ResultSet results = state.executeQuery();
und es sollte dir gut gehen.
(Und natürlich
resultname = state2.executeQuery(sql2);
muss sein
resultname = state2.executeQuery();
auch)