Zavoláním executeQuery(sql) ve skutečnosti vyvoláte metodu na Statement - není na PreparedStatement . Takže vyhodíte již přiřazenou hodnotu parametru a provedete dotaz, kde je zástupný symbol ? zůstane neanalyzovaný - takže se zobrazí tato chyba.
Změnit
ResultSet results = state.executeQuery(sql);
do
ResultSet results = state.executeQuery();
a měli byste být v pořádku.
(A z důvodu
resultname = state2.executeQuery(sql2);
musí být
resultname = state2.executeQuery();
také)