En appelant executeQuery(sql) vous invoquez en fait une méthode sur Statement - pas sur PreparedStatement . Donc, vous jetez la valeur de paramètre déjà affectée et exécutez une requête où l'espace réservé ? reste non analysé - vous obtenez donc cette erreur.
Modifier
ResultSet results = state.executeQuery(sql);
à
ResultSet results = state.executeQuery();
et ça devrait aller.
(Et de cause
resultname = state2.executeQuery(sql2);
doit être
resultname = state2.executeQuery();
aussi)