Чрез извикване на executeQuery(sql) всъщност извиквате метод в Statement - не на PreparedStatement . Така че изхвърляте вече присвоената стойност на параметъра и изпълнявате заявка, където заместителят ? остава неанализиран - така че получавате тази грешка.
Промяна
ResultSet results = state.executeQuery(sql);
до
ResultSet results = state.executeQuery();
и трябва да сте добре.
(И по причина
resultname = state2.executeQuery(sql2);
трябва да бъде
resultname = state2.executeQuery();
също)