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)