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