Invocando executeQuery(sql)
en realidad invocas un método en Statement
- no en PreparedStatement
. Así que descarta el valor del parámetro ya asignado y ejecuta una consulta donde el marcador de posición ?
permanece sin analizar, por lo que obtiene ese error.
Cambiar
ResultSet results = state.executeQuery(sql);
a
ResultSet results = state.executeQuery();
y deberías estar bien.
(Y de causa
resultname = state2.executeQuery(sql2);
tiene que ser
resultname = state2.executeQuery();
también)