Ved at kalde executeQuery(sql) du faktisk påberåber en metode på Statement - ikke på PreparedStatement . Så du smider den parameterværdi, der allerede er tildelt, og udfører en forespørgsel, hvor pladsholderen ? forbliver unparsed - så du får den fejl.
Skift
ResultSet results = state.executeQuery(sql);
til
ResultSet results = state.executeQuery();
og du burde have det godt.
(Og af årsag
resultname = state2.executeQuery(sql2);
skal være
resultname = state2.executeQuery();
også)