Invocando executeQuery(sql) invochi effettivamente un metodo su Statement - non su PreparedStatement . Quindi butti via il valore del parametro già assegnato ed esegui una query in cui il segnaposto ? rimane non analizzato, quindi ottieni quell'errore.
Cambia
ResultSet results = state.executeQuery(sql);
a
ResultSet results = state.executeQuery();
e dovresti stare bene.
(E di causa
resultname = state2.executeQuery(sql2);
deve essere
resultname = state2.executeQuery();
anche)